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

Android应用点击Courses按钮启动Activity时出现空指针异常求助

解决Courses Activity启动时的空指针异常

问题根源

报错java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.material.bottomnavigation.BottomNavigationView.setSelectedItemId(int)' on a null object reference,本质是你在Courses类里调用bottomNavigationView.setSelectedItemId(R.id.courses)时,bottomNavigationView为null——因为activity_courses.xml布局文件里完全没有id为bottom_navigator的BottomNavigationView控件,findViewById(R.id.bottom_navigator)找不到目标控件,自然返回null。

修复步骤

1. 给activity_courses布局添加BottomNavigationView

打开activity_courses.xml,在ConstraintLayout内部添加底部导航栏控件,通常固定在页面底部,示例代码如下:

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 原有的Button、TextView代码保持不变 -->

    <!-- 添加底部导航栏 -->
    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigator"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:menu="@menu/bottom_nav_menu" /> <!-- 关联你定义的底部导航菜单,需包含home、dashboard、courses三个item -->

</androidx.constraintlayout.widget.ConstraintLayout>

需要确保项目中存在对应的菜单文件(比如res/menu/bottom_nav_menu.xml),菜单示例如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/home"
        android:title="Home"
        android:icon="@drawable/ic_home"/>
    <item
        android:id="@+id/dashboard"
        android:title="Dashboard"
        android:icon="@drawable/ic_dashboard"/>
    <item
        android:id="@+id/courses"
        android:title="Courses"
        android:icon="@drawable/ic_courses"/>
</menu>

2. (可选)添加非空判断加固代码

如果担心布局加载异常,可在Courses类中给bottomNavigationView添加非空判断,避免意外崩溃:

bottomNavigationView = findViewById(R.id.bottom_navigator);
if (bottomNavigationView != null) {
    bottomNavigationView.setSelectedItemId(R.id.courses);
    bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()){
                case R.id.dashboard:
                    startActivity(new Intent(getApplicationContext(), Dashboard.class));
                    overridePendingTransition(0,0);
                    return true;
                case R.id.home:
                    startActivity(new Intent(getApplicationContext(),MainActivity.class));
                    overridePendingTransition(0, 0);
                    return true;
                case R.id.courses:
                    return true;
            }
            return true;
        }
    });
}

内容的提问来源于stack exchange,提问作者samuel owoade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:35:27