Issue
I have 3 Fragment A, B, C , in MainActivity.
A ,B,C extents the BaseFragment:
class BaseFragment extents Fragment{
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
Log.d("onHiddenChanged:",this.getClass().getName()+" hidden:"+hidden);
}
...
}
and In the MainActiviy like that:
class MainActiviy extents Activity{
onCreate(){
...
fragmentTransaction.add(android.R.id.content, fragmentA, fragmentA.getClass().getName());
fragmentTransaction.addToBackStack(fragmentA.getClass().getName());
fragmentTransaction.commit();
...
}
}
When Click fragmentA,just enter to fragmentB (just Add B and Hide A, and add B to BackStack):
fragmentTransaction.add(android.R.id.content, fragmentB, fragmentB.getClass().getName());
fragmentTransaction.addToBackStack(fragmentB.getClass().getName());
fragmentTransaction.hide(fragmentA).commit();
When Click fragmentB,just enter to fragmentC,just like above.
So, I enter A ,enter B ,enter C by step, and then in the FragmentC, I press the back button, I notice that, all the added fragment show's up:
onHiddenChanged:FragmentB
onHiddenChanged:FragmentA
that's not my expects. When I press BackButton in FragnmentC, I just want to show FragmentB, and the FragmentA keep hidden.
Solution
Because your add all fragments instead of replace.
I would recommend you to use this method instead of add new fragments and hide old ones.
private void changeFragment(Fragment frag, boolean saveInBackstack) {
String backStateName = ((Object) frag).getClass().getName();
try {
FragmentManager manager = getSupportFragmentManager();
if (manager.findFragmentByTag(backStateName) == null) {
//fragment not in back stack, create it.
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, frag, backStateName);
if (saveInBackstack) {
Log.d(TAG, "Change Fragment: addToBackTack " + backStateName);
transaction.addToBackStack(backStateName);
} else {
Log.d(TAG, "Change Fragment: NO addToBackTack");
}
transaction.commit();
} else {
manager.popBackStack();
}
} catch (IllegalStateException exception) {
Log.w(TAG, "Unable to commit fragment, could be activity as been killed in
}
}
Answered By - ziLk
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.