You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中MDC导航栏无法重写setOnItemSelectedListener问题

正确实现NavigationBarView的setOnItemSelectedListener(Java)

一、匿名内部类方式(修正你的方式一)

你的方式一逻辑本身没问题,报错大概率是调用或资源配置问题,先确保代码正确落地:

private void setupBottomNavigation() {
    NavigationBarView navigationBarView = findViewById(R.id.bottom_navigation);
    navigationBarView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            // 必须导入android.view.MenuItem,别用其他包下的MenuItem类
            switch (item.getItemId()) {
                case R.id.item_1:
                    // 写item1的处理逻辑,比如跳转Fragment
                    return true;
                case R.id.item_2:
                    // 写item2的处理逻辑
                    return true;
                default:
                    return false;
            }
        }
    });
}

关键注意:要在Activity的onCreate()方法里调用setupBottomNavigation(),不然监听不会绑定到导航栏上。

二、Lambda表达式方式(修正你的方式二)

你的方式二完全用错了参数格式——把NavigationBarView.OnItemSelectedListener和AdapterView.OnItemClickListener的接口搞混了。前者的抽象方法只接收一个MenuItem参数,正确Lambda写法如下(要求项目支持Java 8及以上):

private void setupBottomNavigation() {
    NavigationBarView navigationBarView = findViewById(R.id.bottom_navigation);
    navigationBarView.setOnItemSelectedListener(item -> {
        switch (item.getItemId()) {
            case R.id.item_1:
                // 处理逻辑
                return true;
            case R.id.item_2:
                // 处理逻辑
                return true;
            default:
                return false;
        }
    });
}

常见报错排查点

  • R.id.item_1不存在:检查底部导航的菜单资源文件(一般是res/menu/bottom_nav_menu.xml),确保菜单项id和代码里的完全一致,示例配置:
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@+id/item_1"
            android:title="首页"
            android:icon="@drawable/ic_home"/>
        <item
            android:id="@+id/item_2"
            android:title="我的"
            android:icon="@drawable/ic_profile"/>
    </menu>
    
  • MenuItem导入错误:必须导入import android.view.MenuItem;,如果导入了 androidx 包下的MenuItem,会导致getItemId()报错。
  • Java版本不支持Lambda:如果Lambda写法报错,在Module级别的build.gradle里配置Java 8支持:
    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    

内容的提问来源于stack exchange,提问作者Li's hideout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:30:13