我正在使用导航抽屉在 Android 上设计一个应用程序。假设我浏览片段并从Fragment 1
到Fragment 2
。一切正常,但是当我进入Fragment 2
(从导航抽屉加载)并单击系统后退按钮时,尽管我得到了上一个片段(我使用addToBackStack
),但导航抽屉没有得到更新并且单元格Fragment 2
被突出显示。我应该怎么做才能解决这个问题?
问问题
3256 次
2 回答
3
找到了解决方案:
在每个addToBackStack
. 因此,如果我调用addToBackStack
它,代码如下所示:
addToBackStack("Fragment1");
addToBackStack("Fragment2");
每当我将每个片段放入堆栈时。然后我覆盖按下的后退按钮:
@Override
public void onBackPressed() {
super.onBackPressed();
FragmentManager fm = getSupportFragmentManager();
String stackName = null;
for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
stackName = fm.getBackStackEntryAt(entry).getName();
Log.i("BC", "stackEntry" + entry);
}
if (stackName == "Fragment1"){
mDrawerList.setItemChecked(0, true);
} else if (stackName == "Fragment2") {
mDrawerList.setItemChecked(1, true);
}
}
于 2013-06-26T12:05:50.330 回答
0
这个问题已有 2 年历史,@alecnash 的答案正在发挥作用。但在我看来,他是在盗用这种onBackPressed()
方法……对于后来的谷歌人来说:
最好使用OnBackStackChangedListener
. 在这种方法中,您不需要覆盖onBackPressed()
您可能需要的其他东西。与来自@alecnash 的代码一起,监听器看起来像:
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
FragmentManager fm = getSupportFragmentManager();
String stackName = null;
for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
stackName = fm.getBackStackEntryAt(entry).getName();
Log.i("BC", "stackEntry" + entry);
}
if (stackName == "Fragment1"){
mDrawerList.setItemChecked(0, true);
} else if (stackName == "Fragment2") {
mDrawerList.setItemChecked(1, true);
}
});
于 2015-09-11T14:02:14.017 回答