Fragment中跨线程调用控件的问题
16lz
2021-01-26
在Fragment内设置控件状态时,报JNI DETECTED ERROR IN APPLICATION: can't call void android.view.View.setElevation(float) on null obj错误,并且有一串超长的异常。
百度到的答案都是说因为布局嵌套AppBarLayout 引起的,在布局文件中加入:android:stateListAnimator="@null"就可以了,但我并没有使用AppBarLayout 。
再次检查代码时,发现我是在独立的线程中设置控件状态,实际上是跨线程调用控件了,以往也经常犯这种错误,但是在Activity中,会抛出CalledFromWrongThreadException异常,把设置状态的代码放在runOnUiThread中就可以了。
这段异常是android自动生成的底部导航栏关联的Fragment中出现的,报的异常和Activity中不一样,解决的方式倒是一样的。
activity!!.runOnUiThread { buttonDevice.isEnabled = false}
更多相关文章
- Android下使用Logcat打印信息
- Android设置虚线、圆角、渐变
- Unable to resolve target 'android-7'
- Android中更改SQLite数据库中的数据后,刷新ListView。
- Android动画分类
- 终结篇:Android(安卓)startActivity原理分析(基于Android(安卓)8.
- Android(安卓)Dialog弹出时背景全透明
- android studio不能运行
- Android(安卓)Material Design TabLayout属性app:tabMode和app: