【问题标题】:BottomNavigationView - How to get selected menu item?BottomNavigationView - 如何获取选定的菜单项?
【发布时间】:2017-05-18 11:06:03
【问题描述】:

我使用了 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;
                    }
                });
    }

【问题讨论】:

  • 您能否更清楚地了解“防止重新打开片段”?您对导航项(菜单)点击有何期望?

标签: android bottomnavigationview


【解决方案1】:

先获取选中项,然后getMenu().findItem(int itemId)

bottomNavigationView.getMenu().findItem(bottomNavigationView.getSelectedItemId())

【讨论】:

    【解决方案2】:

    解决方案:

    private int getSelectedItem(BottomNavigationView bottomNavigationView) {
        Menu menu = bottomNavigationView.getMenu();
        for (int i = 0; i < bottomNavigationView.getMenu().size(); i++) {
            MenuItem menuItem = menu.getItem(i);
            if (menuItem.isChecked()) {
                return menuItem.getItemId();
            }
        }
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        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,因为函数会消耗事件。

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

        【讨论】:

          猜你喜欢
          • 2018-08-19
          • 2018-12-20
          • 2013-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-02
          相关资源
          最近更新 更多