Am einfachsten ist es wohl, eine Schnittstelle zu erstellen und in der Aktivität zu prüfen, ob das Fragment vom Typ der Schnittstelle ist, und wenn ja, seine Methode aufzurufen, um das Pop zu behandeln. Hier ist die Schnittstelle, die im Fragment implementiert werden soll.
public interface BackPressedFragment {
// Note for this to work, name AND tag must be set anytime the fragment is added to back stack, e.g.
// getActivity().getSupportFragmentManager().beginTransaction()
// .replace(R.id.fragment_container, MyFragment.newInstance(), "MY_FRAG_TAG")
// .addToBackStack("MY_FRAG_TAG")
// .commit();
// This is really an override. Should call popBackStack itself.
void onPopBackStack();
}
So wird es umgesetzt.
public class MyFragment extends Fragment implements BackPressedFragment
@Override
public void onPopBackStack() {
/* Your code goes here, do anything you want. */
getActivity().getSupportFragmentManager().popBackStack();
}
Und in Ihrer Aktivität, wenn Sie das Pop behandeln (wahrscheinlich in beiden onBackPressed und onOptionsItemSelected), pop der Backstack mit dieser Methode:
public void popBackStack() {
FragmentManager fm = getSupportFragmentManager();
// Call current fragment's onPopBackStack if it has one.
String fragmentTag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName();
Fragment currentFragment = getSupportFragmentManager().findFragmentByTag(fragmentTag);
if (currentFragment instanceof BackPressedFragment)
((BackPressedFragment)currentFragment).onPopBackStack();
else
fm.popBackStack();
}