BottomNavigationView - 如何获取所选菜单项?

时间:2017-01-04 08:10:50

标签: android bottomnavigationview

我使用BottomNavigationView来切换片段。如何获取当前选中的菜单项,以防止重新打开片段?

        BottomNavigationView bottomNavigationView = (BottomNavigationView)
                findViewById(R.id.bottom_navigation);

        bottomNavigationView.setOnNavigationItemSelectedListener(
                new BottomNavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.action_1:
                                // open fragment 1
                                break;
                            case R.id.action_2:
                                // open fragment 2
                                break;
                            case R.id.action_3:
                                // open fragment 3
                                break;
                        }
                        return false;
                    }
                });
    }

4 个答案:

答案 0 :(得分:9)

首先获取所选项目,然后获取all(is.na(y)) [1] TRUE

getMenu().findItem(int itemId)

答案 1 :(得分:6)

解决方案:

dstdir

答案 2 :(得分:1)

使用getSelectedItemId获取当前选定的菜单项ID:

int selectedItemId = bottomNavigationView.getSelectedItemId();
MenuItem selectedItem = bottomNavigationView.getMenu().findItem(selectedItemId);

此方法已从Android支持库25.3.0开始提供。

答案 3 :(得分:0)

我认为检查上一项是否为下一项的最简单解决方案是:

BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);

bottomNavigationView.setOnNavigationItemSelectedListener(
    new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            final int previousItem = bottomNavigationView.getSelectedItemId();
            final int nextItem = item.getItemId();
            if (previousItem != nextItem) {
                 switch (nextItem) {
                     case R.id.action_1:
                         // open fragment 1
                         break;
                     case R.id.action_2:
                         // open fragment 2
                         break;
                     case R.id.action_3:
                         // open fragment 3
                         break;
                 }
            }
            return true;
        }
    }
);

请注意,无需进行迭代,并且onNavigationItemSelected返回true,因为该函数消耗了事件。

我希望它能对某人有所帮助。