【问题标题】:BottomNavigationView enable click disable checkBottomNavigationView 启用单击禁用检查
【发布时间】:2018-08-27 07:01:52
【问题描述】:

我正在使用带有 5 个项目、4 个片段和 1 个活动的底部导航视图,如下图所示

当点击任何片段时,我希望它正常运行,得到clickedchecked,但是当点击“+”项时,我正在打开一个活动,但我不希望它是checked ,所以我希望它是clickable,以便它可以打开活动,但我不想成为checked,因为当用户从活动返回时会看到它被选中,即使它是错误的选择项。 我该怎么做?

这是我的代码:

bottomNavigationView = findViewById(R.id.bottom_nav_view);
bottomNavigationView.setOnNavigationItemSelectedListener(this);

.

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    int id = menuItem.getItemId();
    Fragment fragment = null;
    switch (id) {
        case R.id.home_nav_menu:
            fragment = new HomeFragment();
            break;
        case R.id.inbox_nav_menu:
            fragment = new InboxFragment();
            break;
        case R.id.add_nav_menu:
            Intent intent = new Intent(this, AddActivity.class);
            startActivity(intent);
            return true;
        case R.id.history_nav_menu:
            fragment = new HistoryFragment();
            break;
        case R.id.profile_nav_menu:
            fragment = new ProfileFragment();
            break;
    }
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_place_holder, fragment).commit();
    return true;
}

【问题讨论】:

  • 在这里发布您的代码,向我们展示您到目前为止所做的尝试
  • @Quicklearner 我的 BottomNavigationView 正常工作,没有任何问题,但我找不到任何方法来禁用它以获得焦点或被检查,所以我没有尝试禁用的代码它
  • 我明白了,您可以添加您的代码,以便我们可以看到并在其中进行更改
  • @Quicklearner 完成
  • inside case R.id.add_nav_menu: menuItem.setCheckable(false);

标签: android android-layout android-view android-menu bottomnavigationview


【解决方案1】:

查看底部导航监听器的源代码,当您不想将项目显示为选中时,只需返回 false 即可。

 /**
     * Listener for handling selection events on bottom navigation items.
     */
    public interface OnNavigationItemSelectedListener {

        /**
         * Called when an item in the bottom navigation menu is selected.
         *
         * @param item The selected item
         *
         * @return true to display the item as the selected item and false if the item should not
         *         be selected. Consider setting non-selectable items as disabled preemptively to
         *         make them appear non-interactive.
         */
        boolean onNavigationItemSelected(@NonNull MenuItem item);
    }

因此,您只需在 case R.id.add_nav_menu: 中返回 false 即可。

【讨论】:

  • 这么简单又好用,非常感谢
  • 如果您发布带有问题的代码,请参阅@YousefGamal,您将很快得到答案:)
  • @Quicklearner 是的,这是我刚刚学到的东西,谢谢你^_^
【解决方案2】:

用户MenuItem#setCheckable(boolean) API,以便使用菜单项的可检查状态。

MenuItem menuItem = navigation.getMenu().getItem(1); menuItem.setCheckable(false);

【讨论】:

    【解决方案3】:

    试试这样:

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    int id = menuItem.getItemId();
    Fragment fragment = null;
    switch (id) {
        case R.id.home_nav_menu:
            fragment = new HomeFragment();
            break;
        case R.id.inbox_nav_menu:
            fragment = new InboxFragment();
            break;
        case R.id.add_nav_menu:
      menuItem.setCheckable(false);
            Intent intent = new Intent(this, AddActivity.class);
            startActivity(intent);
            return true;
        case R.id.history_nav_menu:
            fragment = new HistoryFragment();
            break;
        case R.id.profile_nav_menu:
            fragment = new ProfileFragment();
            break;
    }
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_place_holder, fragment).commit();
    return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-04
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多