BottomNavigationView - 如何获取选定的菜单项?

Posted

技术标签:

【中文标题】BottomNavigationView - 如何获取选定的菜单项?【英文标题】:BottomNavigationView - How to get selected menu item? 【发布时间】: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;
                    
                );
    

【问题讨论】:

您能否更清楚地了解“防止重新打开片段”?您对导航项(菜单)点击有何期望? 【参考方案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,因为函数会消耗事件。

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

【讨论】:

以上是关于BottomNavigationView - 如何获取选定的菜单项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BottomNavigationView 的片段上打开搜索界面?

如何禁用 BottomNavigationView 移位模式?

如何在Android的BottomNavigationView中设置填充项

如何将 BottomNavigationView 与 NavigationView 一起对齐到 Activity 的底部?

Android关于BottomNavigationView效果实现指南

Android关于BottomNavigationView效果实现指南