4

我正在使用导航抽屉在 Android 上设计一个应用程序。假设我浏览片段并从Fragment 1Fragment 2。一切正常,但是当我进入Fragment 2(从导航抽屉加载)并单击系统后退按钮时,尽管我得到了上一个片段(我使用addToBackStack),但导航抽屉没有得到更新并且单元格Fragment 2被突出显示。我应该怎么做才能解决这个问题?

4

2 回答 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 回答