按下后退按钮时更新导航抽屉(使用DrawerLayout)

时间:2013-06-25 11:20:23

标签: android back-button slidingdrawer navigation-drawer

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

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);
                }

            });