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

Android点击Button返回主Activity抛出IllegalStateException问题求助

问题原因
  • 直接报错诱因:系统查找android:onClick声明的NewBack方法时,没有在XML绑定的Context中匹配到对应方法,通常是因为布局文件根节点没有声明tools:context指向当前CreateQuestion Activity,导致方法搜索范围错误。
  • 逻辑错误:你当前的返回实现setContentView(R.layout.activity_main)仅为当前第二个Activity替换布局,并没有真正回退到主Activity,即便方法匹配成功,后续操作主布局控件也会触发找不到方法的崩溃。
解决方案

提供两种实现方式,按需选择即可:

方案1:保留XML中android:onClick属性配置

  1. 给activity_create_question.xml的根布局添加tools:context属性,明确绑定当前Activity,示例如下:
<!-- 此处以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"
    tools:context=".CreateQuestion">
    <!-- 原有布局内容保持不变 -->
</androidx.constraintlayout.widget.ConstraintLayout>
  1. 修改CreateQuestion中NewBack方法的逻辑,替换错误的布局切换代码:
public void NewBack(View v){
    // 关闭当前第二个Activity,系统会自动返回到栈中存在的主Activity
    finish();
}

方案2:使用setOnClickListener实现(更稳定,推荐)

  1. 删除XML中Button的android:onClick="NewBack"属性。
  2. 修改CreateQuestion的onCreate方法,添加按钮点击监听逻辑:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create_question);
    Button backBtn = findViewById(R.id.back);
    backBtn.setOnClickListener(v -> {
        finish();
    });
}

如果之前尝试setOnClickListener也报错,通常是因为之前的点击逻辑仍然使用了错误的setContentView实现,替换为finish()即可解决。

内容的提问来源于stack exchange,提问作者Henry Gilbert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:24:10