Android登录跳转Main2Activity崩溃:ActionBar空指针异常求助
解决Main2Activity启动时的NullPointerException问题
你遇到的这个崩溃是因为Main2Activity中调用NavigationUI.setupActionBarWithNavController()时,ActionBar对象为null,导致无法执行setTitle()方法。下面来分析原因和解决办法:
报错原因
从报错栈可以看到,崩溃发生在ActionBarOnDestinationChangedListener.setTitle()方法里,这说明你的Main2Activity使用的主题是没有默认ActionBar的(比如Theme.MaterialComponents.NoActionBar或者类似的无ActionBar主题),但代码里却尝试去配置ActionBar,自然会抛出空指针异常。
解决方案
根据你的需求,有两种处理方式:
方式1:保留ActionBar(推荐如果需要顶部导航栏的话)
- 打开
res/values/styles.xml(或者对应的夜间模式styles文件),找到Main2Activity使用的主题,把它修改为带有ActionBar的主题,比如:
<style name="AppTheme.Main2Activity" parent="Theme.MaterialComponents.Light.DarkActionBar"> <!-- 其他自定义属性 --> </style>
- 确保在
AndroidManifest.xml中,Main2Activity的android:theme属性指向这个带ActionBar的主题:
<activity android:name=".Main2Activity" android:theme="@style/AppTheme.Main2Activity" />
- 重新运行App,此时
setupActionBarWithNavController()就能正常找到ActionBar,不会再崩溃。
方式2:不需要ActionBar(隐藏顶部栏)
如果你的App设计不需要顶部ActionBar,可以修改Main2Activity的代码,移除ActionBar相关的配置,只保留底部导航的逻辑:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); BottomNavigationView navView = findViewById(R.id.nav_view); AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications) .build(); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); // 移除ActionBar相关配置代码 NavigationUI.setupWithNavController(navView, navController); }
这样就不会再尝试操作不存在的ActionBar,崩溃问题直接解决。
额外提示:如果使用自定义Toolbar
如果你想用自定义Toolbar代替默认ActionBar,需要先在布局中添加Toolbar,再在代码中设置为SupportActionBar:
- 在
activity_main2.xml中添加Toolbar:
<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" />
- 在
Main2Activity的onCreate()中配置:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); // 设置自定义Toolbar为SupportActionBar Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); BottomNavigationView navView = findViewById(R.id.nav_view); AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications) .build(); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); NavigationUI.setupWithNavController(navView, navController); }
同时确保主题是无ActionBar的,这样自定义Toolbar就能正常工作。
内容的提问来源于stack exchange,提问作者aman boral
相关产品推荐
相关产品推荐

