Android javascript接口调用的方法不会更新视图

Android javascript接口调用的方法不会更新视图,android,Android,我已经在这上面呆了一段时间了。我有一个webviewfragment,它有一个html文件,是我创建、加载的。html文件中有一些javascript,允许我调用android应用程序中的一些方法。以下是html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns

我已经在这上面呆了一段时间了。我有一个webviewfragment,它有一个html文件,是我创建、加载的。html文件中有一些javascript,允许我调用android应用程序中的一些方法。以下是html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
</head>

<body>
<img src="Guideline1.gif" usemap="#Guideline9" border="0" />
<map name="Guideline9" id="generalGuideline9">
 <area shape="rect" coords="124,329,290,357" onClick="Android.TestMethod();" />
</map>


</body>
</html>
}

这就让我的webviewfragment调用父活动的一个方法,该方法正在工作。Main活动实现CommunicateWithMyWebView接口。以下是包含addTab()方法的主活动代码部分:

tabsFrag是MainActivity显示的另一个片段。以下是tabsFrag中test1()函数的代码:

public void test1() {

    Log.d("MyApp", "" + b1.getText());
}
b1是标签框架内的一个按钮。正如我所展示的,这段代码工作得很好。但如果我将log命令更改为:

public void test1() {

    b1.setVisibility(View.GONE);
}
鉴于b1的可见性当前是可见的,它不会改变模拟器上的可见性(但不会崩溃,API 18),但会在我必须测试的平板电脑上暂停和崩溃。运行4.0.4的三星galaxy标签

如果我从任何其他方法调用tabsFrag中的test1()方法,只要该操作不是来自html文件中的映射区域单击,设置可见性就可以正常工作,不会出现崩溃或任何问题

我不确定如何在这里实现try-catch块


我能得到的任何帮助都会很好

使用ui线程更改视图状态

@JavascriptInterface
    public void TestMethod() {

        runOnUiThread(new Runnable(){

            public void run(){

              mCallback.addTab();
            }

        });

    }

使用ui线程更改视图状态

@JavascriptInterface
    public void TestMethod() {

        runOnUiThread(new Runnable(){

            public void run(){

              mCallback.addTab();
            }

        });

    }

非常感谢。我昨晚很晚才发现。它起作用了。我会接受你的回答。谢谢。我昨晚很晚才发现。它起作用了。我会接受你的回答。
@JavascriptInterface
    public void TestMethod() {

        runOnUiThread(new Runnable(){

            public void run(){

              mCallback.addTab();
            }

        });

    }