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

调用startActivity后App崩溃:RegisterActivity跳转MenuActivity问题排查

注册跳转后应用崩溃的问题排查与修复

嘿,我看了你的问题和报错信息,马上就找到问题所在了!你开发的RegisterActivity注册成功后跳转MenuActivity时崩溃,核心原因已经在报错日志里写得很清楚了。


相关代码

MenuActivity.class

public class MenuActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    private DrawerLayout drawer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();
        if(savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MenuFragment()).commit();
            navigationView.setCheckedItem(R.id.nav_profile);
        }
    }

    @Override
    public void onBackPressed() {
        if(drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch(item.getItemId()) {
            case R.id.nav_menu:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MenuFragment()).commit();
                break;
            case R.id.nav_profile:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
                break;
            case R.id.nav_send:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SendFragment()).commit();
                break;
            case R.id.nav_settings:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit();
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

RegisterActivity.class(注册跳转部分)

mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if(task.isSuccessful()) {
            Toast.makeText(RegisterActivity.this, "User successful created", Toast.LENGTH_SHORT).show();
            startActivity(new Intent(getApplicationContext(), MenuActivity.class));
            //Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
            //intent.putExtra("fullName", fullName);
            //startActivity(intent);
        } else {
            Toast.makeText(RegisterActivity.this, "Error! " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
});

报错信息

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.xxxxxxx, PID: 5790
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.xxxxxxx/com.example.xxxxxxx.activities.MenuActivity}: java.lang.IllegalStateException: 此Activity已有窗口装饰提供的ActionBar。若要使用Toolbar,请不要请求Window.FEATURE_SUPPORT_ACTION_BAR,并在主题中设置windowActionBar为false。
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.IllegalStateException: 此Activity已有窗口装饰提供的ActionBar。若要使用Toolbar,请不要请求Window.FEATURE_SUPPORT_ACTION_BAR,并在主题中设置windowActionBar为false。
at androidx.appcompat.app.AppCompatDelegateImpl.setSupportActionBar(AppCompatDelegateImpl.java:572)
at androidx.appcompat.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:159)
at com.example.inbioaiqua.activities.MenuActivity.onCreate(MenuActivity.java:30)
at android.app.Activity.performCreate(Activity.java:6662)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

问题分析

报错日志里的关键提示已经点明了原因:

java.lang.IllegalStateException: 此Activity已有窗口装饰提供的ActionBar。若要使用Toolbar,请不要请求Window.FEATURE_SUPPORT_ACTION_BAR,并在主题中设置windowActionBar为false。

简单来说,你的MenuActivity同时拥有两个ActionBar:一个是系统主题默认提供的,另一个是你在代码里通过setSupportActionBar(toolbar)设置的自定义Toolbar,这就导致了冲突,直接触发崩溃。


修复方案

按照以下步骤操作就能解决问题:

  1. 创建/修改无ActionBar的主题
    打开res/values/styles.xml(如果有夜间模式样式文件也要同步修改),添加或修改一个不含ActionBar的主题:

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    

    如果你用的是Material Components主题,也可以这样定义:

    <style name="AppTheme.NoActionBar" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- 这里可以添加你需要的其他自定义属性,比如颜色、字体等 -->
    </style>
    
  2. 为MenuActivity指定该主题
    打开AndroidManifest.xml,找到MenuActivity的注册条目,添加android:theme属性指定刚才创建的主题:

    <activity
        android:name=".activities.MenuActivity"
        android:theme="@style/AppTheme.NoActionBar" />
    
  3. 确认Toolbar布局正确
    检查activity_menu.xml中的Toolbar配置,确保它是正常定义的,比如:

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />
    

做完这些修改后,重新运行应用,注册成功跳转MenuActivity就不会崩溃了。

内容的提问来源于stack exchange,提问作者Francesco Bottiglia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:53:50