Android中调用((TextView)mySpinner.getSelectedView()).setError(null)转屏空指针如何解决?
崩溃根因
Android系统默认会在横竖屏切换时销毁并重建Activity,重建过程中Spinner的视图还未完成挂载和渲染,getSelectedView()会返回null,你直接对返回值强转TextView并调用setError()方法就会触发空指针异常。
修复方案
方案1:添加空判断防护(最推荐)
在调用方法前先校验getSelectedView()的返回值有效性,空状态下直接跳过执行,不影响原有功能逻辑:
View selectedView = mySpinner.getSelectedView(); if (selectedView != null && selectedView instanceof TextView) { ((TextView) selectedView).setError(null); }
Kotlin写法更简洁:
(mySpinner.selectedView as? TextView)?.setError(null)
方案2:延迟到视图渲染完成后执行
将逻辑放到View的post()回调中,确保逻辑执行时Spinner的视图已经完成初始化:
mySpinner.post(() -> { View selectedView = mySpinner.getSelectedView(); if (selectedView != null && selectedView instanceof TextView) { ((TextView) selectedView).setError(null); } });
方案3:配置Activity避免横竖屏重建
如果你的应用横竖屏不需要切换布局,可以在AndroidManifest.xml对应Activity节点添加配置,禁止横竖屏切换时触发Activity重建:
<activity android:name=".你的Activity名称" android:configChanges="orientation|screenSize|screenLayout|keyboardHidden" />
内容的提问来源于stack exchange,提问作者Rawnak Yazdani
相关产品推荐
相关产品推荐

