Android开发注册页ViewBinding白屏、setContentView闪退求助
问题排查结果
两个异常均为代码逻辑错误导致,Manifest启动页配置没有问题:
- ViewBinding写法页面空白:仅执行了布局inflate操作,未将加载完成的根视图设置给Activity,窗口没有挂载任何可显示的视图,因此呈现空白页。
- setContentView写法闪退:仅加载了布局文件,未初始化ViewBinding实例,后续代码直接访问
binding.alreadyHaveAccount时触发空指针异常,导致应用直接崩溃。
修复代码
标准ViewBinding实现(推荐使用)
调整onCreate方法逻辑,inflate完成后必须将根视图传入setContentView完成挂载:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivitySignUpBinding.inflate(getLayoutInflater()); // 缺少这行就会出现空白页 setContentView(binding.getRoot()); getSupportActionBar().hide(); binding.alreadyHaveAccount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(SignUpActivity.this, SignInActivity.class); startActivity(intent); } }); }
兼容setContentView的实现
如果要保留setContentView加载布局的写法,必须在setContentView之后绑定布局初始化binding实例,否则会触发空指针:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_up); // 缺少这行就会出现空指针闪退 binding = ActivitySignUpBinding.bind(findViewById(android.R.id.content)); getSupportActionBar().hide(); binding.alreadyHaveAccount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(SignUpActivity.this, SignInActivity.class); startActivity(intent); } }); }
后续异常排查
如果修改上述代码后仍有问题,按以下顺序检查:
- 核对布局中引用的
@drawable/w1、@color/white、@color/chatbackground、@color/fb_color资源是否存在,资源名拼写错误会导致布局解析失败崩溃 - 确认
SignInActivity已在AndroidManifest.xml中注册,跳转未注册的Activity会触发运行时异常 - 执行Android Studio顶部菜单栏
Build > Clean Project清除旧构建缓存后重新运行,避免ViewBinding生成类缓存导致的异常
内容的提问来源于stack exchange,提问作者Agrim Singh
相关产品推荐
相关产品推荐

