Android WebView回调无法更改控件状态

来源:互联网 发布:gta5pc男角色捏脸数据 编辑:程序博客网 时间:2024/06/11 20:46

问题背景:Android WebView加载html,获取js暴露给Android的方法,使用接口进行回调,在回调方法中不能更改控件的任何状态。

MainActivity.java

private RelativeLayout rlLoading;
...

rlLoading = (RelativeLayout) findViewById(R.id.rl_progress_indicator);
...

这是回调方法中出错的代码,程序并不崩溃,但是这个控件并不会显示或者隐藏,如果后面还有其他的代码也是执行不到的。

@Overridepublic void showLoading(boolean visible) {   if (visible) {       rlLoading.setVisibility(View.VISIBLE);   } else {       rlLoading.setVisibility(View.GONE);   }}
出现这个问题的原因是因为回调js的方法时,已经不在主线程了,所以在js回调方法中进行Activity的回调方法也无法实现UI线程中控件状态的改变。

以下代码是解决这个问题的办法,即将控件的状态改变强行在主线程中执行。

@Overridepublic 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);         }      });   }}
该问题解决了,齐活,下班!


0 0
原创粉丝点击