问题背景:Android WebView加载html,获取js暴露给Android的方法,使用接口进行回调,在回调方法中不能更改控件的任何状态。
MainActivity.java
private RelativeLayout rlLoading;...
rlLoading = (RelativeLayout) findViewById(R.id.rl_progress_indicator);...
这是回调方法中出错的代码,程序并不崩溃,但是这个控件并不会显示或者隐藏,如果后面还有其他的代码也是执行不到的。
@Override public void showLoading(boolean visible) { if (visible) { rlLoading.setVisibility(View.VISIBLE); } else { rlLoading.setVisibility(View.GONE); } }出现这个问题的原因是因为回调js的方法时,已经不在主线程了,所以在js回调方法中进行Activity的回调方法也无法实现UI线程中控件状态的改变。
以下代码是解决这个问题的办法,即将控件的状态改变强行在主线程中执行。
@Override public void showLoading(boolean visible) { if (visible) { runOnUiThread(new Runnable() { @Override public void run() { rlLoading.setVisibility(View.VISIBLE); } }); } else { runOnUiThread(new Runnable() { @Override public void run() { rlLoading.setVisibility(View.GONE); } }); } }该问题解决了,齐活,下班!