我的目标是以下行为。
当我参加我的主要活动时, 如果我导航到片段1, 从那里,导航到片段2, 然后当我按下手机的后退按钮时, 因为我在片段2上,所以我返回到主屏幕,而不是片段1.
如果我在页面上有一个单独的按钮,这种行为将非常简单,就像我可以做的那样:
Button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
FragmentManager fm = getFragmentManager();
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
我遇到了困难,因为我需要使用手机自带的后退按钮。我已经读过OnButtonPressed()事件只能由一个活动而不是一个片段使用,并且将这种逻辑移动到活动中证明是困难的!
如何实现我之后的行为?
答案 0 :(得分:1)
添加片段时,需要将事务添加到后台堆栈。这意味着您希望在按下后退按钮时反转此事务。
请使用以下代码:
getSupportFragmentManager().beginTransaction()
.add(detailFragment, "detail")
// Add this transaction to the back stack
.addToBackStack()
.commit();
您可以在以下网址找到更多详情:
https://developer.android.com/training/implementing-navigation/temporal.html
答案 1 :(得分:1)
只需跟踪backstackcount,您可以根据计数做任何您想做的事情:
@Override
public void onBackPressed() {
manageBackStack();
}
private void manageBackStack() {
switch (getSupportFragmentManager().getBackStackEntryCount()) {
case 1:
//Do when count is 1
break;
case 2:
//Do when count is 2
break;
default:
finish();
}
}
希望它会有所帮助:)