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

使用View Binding开发的Android应用在AVD运行时出现白屏如何解决

问题排查及解决方案

核心问题点

  • 混淆View Binding与Data Binding用法:你声明使用View Binding,但代码中调用的DataBindingUtil是Data Binding组件的专属类,若未在模块级build.gradle中开启Data Binding配置,会导致binding初始化失败、布局加载异常。
  • for循环逻辑错误触发死循环:代码中for (int i = 0; i < questionBank.length;)未添加i++自增逻辑,循环永远无法退出,主线程持续被阻塞无法执行UI绘制流程,是白屏的直接诱因。
  • 冗余调用setContentView:DataBindingUtil.setContentView已经完成了布局加载与绑定操作,后续再执行setContentView(binding.getRoot())属于无效重复操作,属于不规范写法。
  • 循环内重复覆盖控件配置:即便修复死循环问题,循环执行过程中会重复给textView赋值、覆盖按钮点击事件,最终仅最后一条题目的配置会生效,不符合答题应用的交互预期。

修复方案

  1. 优先确认你使用的视图绑定类型:
    • 若使用View Binding,需将binding初始化逻辑替换为View Binding的标准写法,无需使用DataBindingUtil
    • 若使用Data Binding,需先确认模块级build.gradle中已添加开启配置:
      android {
          buildFeatures {
              dataBinding true
          }
      }
      
  2. 修复死循环逻辑:如果需求是默认展示第一道题,无需用循环遍历所有题目,直接取下标为0的题目即可;如果需要支持切换题目,可单独编写切换方法,不要在onCreate中遍历所有题目。

修复后代码示例

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 若使用Data Binding保留该行,若使用View Binding替换为下方注释的写法
    binding = DataBindingUtil.setContentView(MainActivity.this,R.layout.activity_main);
    // View Binding写法示例:
    // binding = ActivityMainBinding.inflate(getLayoutInflater());
    // setContentView(binding.getRoot());
    
    binding.textView.setTextSize(18);
    // 直接取第一道题展示,不需要循环
    if(questionBank.length > 0) {
        Questions currentQuestion = questionBank[0];
        binding.textView.setText(currentQuestion.getAnswerResId());
        binding.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (currentQuestion.isAnswerTrue()) {
                    Toast.makeText(MainActivity.this, R.string.correct_answer, Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, R.string.wrong_answer, Toast.LENGTH_SHORT).show();
                }
            }
        });

        binding.button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!currentQuestion.isAnswerTrue()) {
                    Toast.makeText(MainActivity.this, R.string.correct_answer, Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, R.string.wrong_answer, Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:36:03