Let's say I have Fragment A, from which I open a DialogFragment
like this:
FragmentActivity fragmentActivity = (FragmentActivity) view.getContext();
FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction();
Fragment prev = fragmentActivity.getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
DialogFragment fragmentDialog = MyDialogFragment.newInstance();
fragmentDialog.show(ft, "dialog");
From this Dialog, after clicking (positive / neutral / negative) button, I want to open Fragment B, which should replace Fragment A.
In the Dialog's onClick method I run a callback method of parent Activity:
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which) {
case DialogInterface.BUTTON_NEUTRAL:
detailsCallbacks.openMoreDetails();
break;
}
}
And finally my Activity's openMoreDetails()
method looks like this:
@Override
public void openMoreDetails() {
Fragment fragmentB = Fragment.newInstance();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, fragmentB);
ft.addToBackStack(null);
ft.commit();
}
What I get is strange. Fragment B blinks on the screen just for a fraction of a second and then is replaced (covered?) by Fragment A again.
When I click the 'up' button I get back from Fragment A, so none of these transactions were added to the back stack. I would like to show Fragment B and then, when pressing the 'up' button, go back to Fragment A.
Is it somehow possible? And what's wrong with my approach?