看看这个:FragmentManager.popBackStack(int, int) http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack(int,%20int)
当您提交片段事务时,该方法会返回该事务的标识符。保存那个int
标识符:
FragmentTransaction xfragmentTransaction = getFragmentManager().beingTransaction();
xfragmentTransaction.replace(R.id.containerView, new MessageTabFragment());
xfragmentTransaction.addToBackStack("MainActivity");
int homeFragmentIdentifier = transaction.commit();
那么,在你的onBackPressed()
方法,您可以添加以下任一行:
getFragmentManager().popBackStack(homeFragmentIdentifier, 0); // Exclusive
or
getFragmentManager().popBackStack("MainActivity", 0); // Exclusive
这会将返回堆栈一直弹出到提供的标识符。或者,如果您想包括homeFragmentIdentifier
在“流行”中,而不是0
use FragmentManager.POP_BACK_STACK_INCLUSIVE
对于第二个参数。
你还是必须打电话FragmentTransaction.addToBackStack()
。根据文档:
公共抽象 int 提交 () ...
如果已调用 addToBackStack(String),则返回此事务的返回堆栈条目的标识符。否则,返回负数。
另外,如果你在将fragment添加到backstack时设置了tag,例如:
transaction.add(yourFragment);
transaction.addToBackStack("[YourFragmentTransactionTag]");
您可以使用替代方法:FragmentManager.popBackStack(String, int) http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack(String,%20int)通过提供您在将事务添加到后台堆栈时使用的标签。
getFragmentManager().popBackStack("[YourFragmentTransactionTag]", 0);