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

3

这个页面有一个左侧导航栏,当用户选择其中一项时,右侧的片段会发生变化。问题在于,如果“项目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个回答

7

我做的事情完全一样,有一个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);
        }

Something like that !


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

我可以使用这种方法,但我还需要知道之前选择了哪个项目,以检查当前项目和上一个项目是否为同一项目。问题在于如何知道哪个项目已经被选择。 - heloisasim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接