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

Android Studio中从其他Activity启动底部导航Activity崩溃求助

问题描述

在Android Studio(Java)环境下开发项目,登录后跳转至带Bottom Navigation View的信息流页面时应用崩溃,但将MainActivity设为Bottom Navigation View形式可正常运行。点击登录按钮触发跳转时,Logcat报错显示homefeed Activity未通过setSupportActionBar()设置ActionBar。

Logcat日志

FATAL EXCEPTION: main                                                                                                    
Process: com.example.traceback, PID: 23707                                                                                                    
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.traceback/com.example.traceback.homefeed}: java.lang.IllegalStateException: Activity com.example.traceback.homefeed@bc417d4 does not have an ActionBar set via setSupportActionBar()                                                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3645)                                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)                                                                                                        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)                                                                                                        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)                                                                                                         at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)                                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)                                                                                                         at android.os.Handler.dispatchMessage(Handler.java:106)                                                                                                         at android.os.Looper.loopOnce(Looper.java:201)                                                                                                      at android.os.Looper.loop(Looper.java:288)                                                                                                      at android.app.ActivityThread.main(ActivityThread.java:7872)                                                                                                        at java.lang.reflect.Method.invoke(Native Method)                                                                                                       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)                                                                                                     Caused by: java.lang.IllegalStateException: Activity com.example.traceback.homefeed@bc417d4 does not have an ActionBar set via setSupportActionBar()                                                                                                        at androidx.navigation.ui.ActionBarOnDestinationChangedListener.setTitle(ActionBarOnDestinationChangedListener.kt:37)                                                                                                       at androidx.navigation.ui.AbstractAppBarOnDestinationChangedListener.onDestinationChanged(AbstractAppBarOnDestinationChangedListener.kt:85)                                                                                                         at androidx.navigation.NavController.addOnDestinationChangedListener(NavController.kt:402)                                                                                                      at androidx.navigation.ui.NavigationUI.setupActionBarWithNavController(NavigationUI.kt:284)                                                                                                         at com.example.traceback.homefeed.onCreate(homefeed.java:43)                                                                                                        at android.app.Activity.performCreate(Activity.java:8305)                                                                                                       at android.app.Activity.performCreate(Activity.java:8284)                                                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1417)                                                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626)                                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)                                                                                                       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)                                                                                                       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)                                                                                                        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)                                                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:106)                                                                                                        at android.os.Looper.loopOnce(Looper.java:201)                                                                                                         at android.os.Looper.loop(Looper.java:288)                                                                                                         at android.app.ActivityThread.main(ActivityThread.java:7872)                                                                                                       at java.lang.reflect.Method.invoke(Native Method)                                                                                                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)                                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

相关代码

homefeed.java

import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.example.traceback.databinding.ActivityHomefeedBinding;
import com.google.android.material.bottomnavigation.BottomNavigationView;

public class homefeed extends AppCompatActivity {

    private ActivityHomefeedBinding binding;
    private Toolbar tbar;
    
    @Override
    public void setSupportActionBar(@Nullable Toolbar toolbar) {
        super.setSupportActionBar(toolbar);
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        tbar=(Toolbar)findViewById(R.id.toolbar);
        super.setSupportActionBar(tbar);
    
        binding = ActivityHomefeedBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
    
        BottomNavigationView navView = findViewById(R.id.nav_view);
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        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_activity_homefeed);
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
        NavigationUI.setupWithNavController(binding.navView, navController);
    }

}

loginPage.java

package com.example.traceback;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.w3c.dom.Text;

public class loginPage extends AppCompatActivity implements View.OnClickListener {

    TextView loginres;
    Button logButton;
    
    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_page);
    
        loginres = (TextView) findViewById(R.id.loginRegis);
        loginres.setPaintFlags(loginres.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
        loginres.setOnClickListener(this);
    
        logButton = (Button) findViewById(R.id.loginButton);
        logButton.setOnClickListener(this);
    }
    
    @Override
    public void onBackPressed(){
        finish();
    }
    
    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.loginRegis){
            finish();
            startActivity(new Intent(this, registerPage.class));
        }
        else if(v.getId()==R.id.loginButton){
            startActivity(new Intent(this, homefeed.class));
        }
    }

}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/icon"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.TraceBack"
        tools:targetApi="31">
        <activity
            android:name=".register2"
            android:exported="false" />
        <activity
            android:name=".registerPage"
            android:exported="false"
            android:windowSoftInputMode="adjustResize" />
        <activity
            android:name=".loginPage"
            android:exported="false" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".homefeed" />

        <meta-data
            android:name="preloaded_fonts"
            android:resource="@array/preloaded_fonts" />
    </application>

</manifest>
解决方法

崩溃原因是homefeed的onCreate方法执行顺序错误:你先尝试获取Toolbar并设置ActionBar,但此时布局还未加载,findViewById(R.id.toolbar)会返回null,导致ActionBar设置失败,后续调用setupActionBarWithNavController时触发异常。

修改homefeed.java的onCreate方法,调整执行顺序:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // 先加载布局
    binding = ActivityHomefeedBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    // 通过binding获取Toolbar,避免null
    tbar = binding.toolbar;
    setSupportActionBar(tbar);

    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_activity_homefeed);
    NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
    NavigationUI.setupWithNavController(binding.navView, navController);
}

同时可以删除你重写的setSupportActionBar方法,该方法没有实际作用,属于冗余代码。

额外检查项:

  • 确认activity_homefeed.xml布局中存在id为toolbar的Toolbar组件;
  • 检查应用主题Theme.TraceBack是否继承自Theme.MaterialComponents.DayNight.NoActionBar这类不自带ActionBar的主题,避免因主题自带ActionBar导致冲突。

内容的提问来源于stack exchange,提问作者Dale Stark Summers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:42:00