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

Android简单应用运行崩溃:修改View可见性时闪退如何排查解决

问题排查结果

崩溃根本原因

成员变量初始化阶段执行findViewById时,Activity尚未调用setContentView加载布局,无法找到对应控件返回null,后续调用空对象的setVisibility方法触发空指针异常,导致应用崩溃。

修复方案

  • 仅保留控件的成员变量声明,移除声明阶段的初始化逻辑
  • 将findViewById初始化逻辑移动到onCreate方法的setContentView调用之后执行
  • 可在调用控件方法前增加非空判断,规避极端场景下的异常

修复后完整代码

public class MainActivity extends AppCompatActivity {
    // 仅声明成员变量
    Button b1;
    TextView tvl;

    public void clickGo(View view) {
        // 非空判断避免异常
        if (b1 != null) {
            b1.setVisibility(View.INVISIBLE);
        }
        if (tvl != null) {
            tvl.setVisibility(View.VISIBLE);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 布局加载完成后再初始化控件
        b1 = (Button) findViewById(R.id.button);
        tvl = (TextView) findViewById(R.id.textView2);
    }
}

补充说明

Android Activity生命周期中,只有调用setContentView后才会将XML布局解析为对应的View实例挂载到Activity上,此时调用findViewById才能正确获取到控件对象。

内容的提问来源于stack exchange,提问作者Kumar Purshottam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:57:02