android - 抽屉导航 : How to know the current selected item?

标签 android material-design android-support-library

有一个左抽屉和一个 fragment ,当抽屉导航中的项目被选中时,它会发生变化。问题是,如果已经选择了“项目 A”,并且用户再次选择它,则 fragment 将更改为同一 fragment 。

为了防止这种行为,我需要知道已经选择了哪个项目。我使用的是属性 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;
        }
    }
}

最佳答案

我做完全相同的事情,有一个 int 变量保存选定的位置。 要记住的一件事是在 InstaceChange 上保存这个变量,因为如果你不这样做,你的抽屉可能已经过时了。 因此,话虽如此,一些代码:

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

类似的东西!

关于android - 抽屉导航 : How to know the current selected item?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37005150/

相关文章:

android - 如何查询android设备硬件信息

ios - iOS:像 Material 设计文本字段占位符一样为占位符设置动画

android - FAB 涟漪效应在视界之外持续存在

android - 如何从 RecyclerView 中删除 SnapHelper

android - Gradle 构建错误找不到支持库

android - 使用 DatePickerDialog 时冲突 support.v4.app.Fragment 与 app.Fragment

php - 无需第三方服务即可同步移动应用程序和网络应用程序

iphone - 最好的手机开发数据库

android - 如何更改 Android 中涟漪效应的持续时间?

android - 如何处理2个FragmentTransaction