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

Android屏幕方向切换时报NullPointerException:findViewById返回null如何解决

问题根因

  1. 你制作了两套布局,存放在res/layout-land目录下的横屏版activity_main.xml中,没有定义id为roll_button的Button控件,切换横屏时系统加载横屏布局后,findViewById(R.id.roll_button)返回null,你使用了非空断言!!就直接触发空指针崩溃。
  2. 你之前的android:configChanges配置加错了位置:该属性需要配置在AndroidManifest.xml对应的<activity>标签下,你写到布局文件的控件和根布局里完全无效,所以之前的配置没有生效。
  3. 你设置android:screenOrientation="portrait"没生效大概率也是配置位置错误,或是两套布局的配置冲突导致。

解决方案

  • 方案1:补全横屏布局内容
    打开res/layout-land/activity_main.xml,补充id为roll_button的Button和id为dice_image的ImageView,保证两个方向的布局中都有Activity代码里需要引用的这两个控件,且id完全一致即可解决问题。
  • 方案2:正确配置configChanges禁止Activity重建
    如果你不需要切换布局,只是想横竖屏使用同一套布局、不重建Activity,先把你写在布局里的android:configChanges="orientation|screenSize"全部删掉,再在AndroidManifest.xml的MainActivity标签里添加配置:
<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize|keyboardHidden">
    <!-- 其他原有配置 -->
</activity>

配置正确后切换横竖屏不会触发Activity重建,就不会重新调用onCreate加载布局,也不会出现空指针问题。

  • 方案3:强制竖屏(如果不需要横屏的话)
    如果你的应用不需要支持横屏,直接在Manifest的Activity标签里加android:screenOrientation="portrait"即可,注意不要加在布局文件里。

优化建议

你可以改用视图绑定(ViewBinding)替代findViewById,可以从编译层面避免空指针和id写错的问题,不需要手动做非空判断,也不会出现这类因为布局控件缺失导致的运行时崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:18:03