我正在使用导航抽屉在Android上设计应用。让我们说我浏览片段并从Fragment 1
转到Fragment 2
。一切正常但是当我在Fragment 2
(从导航抽屉加载)并单击系统后退按钮时,我得到了前一个片段(我使用addToBackStack
)导航抽屉没有得到更新并突出显示Fragment 2
的单元格。我该怎么做才能解决这个问题?
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
问题是2岁,@ alecnash的答案正在发挥作用。但在我看来,他正在挪用onBackPressed()
方法......以及以后的googler:
更好地使用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);
}
});