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

Android中TextView设置setOnClickListener失效致崩溃问题

问题产生原因

核心错误是onCreate生命周期方法内的代码执行顺序错误:

  • findViewById()的工作逻辑是从当前Activity已经加载的视图树中匹配对应ID的控件实例,在调用setContentView()加载布局文件之前,Activity没有挂载任何视图,此时调用findViewById()查找所有控件都会返回null。
  • 你的代码中先执行了控件查找、绑定点击事件的逻辑,最后才调用setContentView(R.layout.activity_main)加载布局,导致numbers等TextView变量全为null,对null对象调用setOnClickListener()方法就触发了日志中的空指针崩溃。
  • 你的XML布局配置本身没有问题,完全符合课程要求的不使用XMLonClick属性的规则,不需要修改布局文件。
修复方案

调整onCreate方法内的代码执行顺序,永远先加载布局,再查找控件、绑定交互逻辑:

  • 把setContentView(R.layout.activity_main);这行代码移动到super.onCreate(savedInstanceState)之后,所有findViewById()调用之前。
  • 修正后的MainActivity.java核心代码如下:
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 第一步:先加载当前页面的布局文件
        setContentView(R.layout.activity_main);

        // 第二步:布局加载完成后,再从视图中查找对应控件实例
        TextView numbers = (TextView)findViewById(R.id.numbers);
        TextView family = (TextView)findViewById(R.id.family);
        TextView colors = (TextView)findViewById(R.id.colors);
        TextView phrases = (TextView)findViewById(R.id.phrases);

        // 第三步:给非空的控件实例绑定点击事件
        numbers.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, NumbersActivity.class);
                startActivity(intent);
            }
        });

        // family、colors、phrases三个控件的点击跳转逻辑可按相同方式后续补充
    }
}
  • 补充注意:后续给其余三个TextView绑定点击事件时,同样要保证代码在setContentView()执行之后,否则会出现相同的空指针崩溃。

内容的提问来源于stack exchange,提问作者Maitreyi Paweria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:31:21