Fragment中跨线程调用控件的问题

在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)