导航抽屉:如何知道当前所选项目?

hel*_*sim 1 android android-support-library material-design

当选择导航抽屉中的项目时,左抽屉和片段会发生变化.问题是,如果已经选择了"项目A",并且用户再次选择它,则对于相同的片段更改片段.

为防止出现这种情况,我需要知道哪个项目已被选中.我使用的是属性mLastSelectedItemPosition,但我不认为这是一个很好的解决方案.有没有办法从导航抽屉中获取当前检查的项目?

class OnNavigationItemSelectedListener implements NavigationView.OnNavigationItemSelectedListener {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            if (mLastSelectedItemPosition != menuItem.getOrder()) {
                // Is not the same item, so I can change the fragment.
                mLastSelectedItemPosition = menuItem.getOrder();
            }
            mDrawerLayout.closeDrawers();
            return true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*rdo 5

我做同样的事情,有一个int变量保持选定的位置.有一点要记住的是保存这个变量onInstaceChange,因为如果你不`吨,你可能会与你的抽屉掉过期.所以,有了这个说,一些代码:

    private static final String MENU_ITEM = "menu_item";
    private int menuItemId;
    ...
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem item) {

                    if (menuItemId == item.getItemId()) {
                        drawerLayout.closeDrawer(navigationView);
                        return false;

                    switch (item.getItemId()) {
....
                    }

                    ...
                    drawerLayout.closeDrawer(navigationView);
                    item.setChecked(true);
                    menuItemId = item.getItemId();
                    return true;
                }
            });
     @Override
        protected void onSaveInstanceState(@NonNull Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putInt(MENU_ITEM, menuItemId);
        }

        @Override
        protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);
            this.menuItemId = savedInstanceState.getInt(MENU_ITEM);
        }
Run Code Online (Sandbox Code Playgroud)

这样的东西!