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

时间:2016-05-03 13:12:18

标签: android material-design android-support-library

当选择导航抽屉中的项目时,左侧抽屉和片段会发生变化。问题是,如果"项目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;
        }
    }
}

2 个答案:

答案 0 :(得分:5)

我做同样的事情,有一个int变量保持所选位置。 要记住的一件事是将此变量保存在InInstaceChange上,因为如果你不知道你的抽屉可能已经过时了。 所以说,有些代码:

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

类似的东西!

答案 1 :(得分:0)

我认为这会对你有帮助。

    private class SlideMenuClickListener implements
                ListView.OnItemClickListener {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                // display view for selected nav drawer item
                displayView(position);
Toast.makeText(getApplicationContext(),"You have selected " +position,Toast.LENGTH_LONG).show();
            }
        }