0

我的活动中有一个 WebView,它有一个 JSInterface :

mWebView.addJavascriptInterface(new JSInterface(mWebView, this), "interfaceWebsite");

当我在我的界面中调用一个函数时,我希望看到一些视图(Textview/Button)被修改。

public void changeStep(int newStep){
                step = newStep;
                tvStep.setText("Etape "+step);
                step_info = getString(R.string.step3_info);

        }
    }

step_info 有效(我的选项菜单更改),它只是一个字符串 var,但不是我的 TextView,它会引发 VM 中止。

我以这种方式调用函数(其中 addWebsiteActivity 在上面的代码中是“this”):

addWebsiteActivity.changeStep(step);

这有可能以适当的方式做到这一点吗?

谢谢


只有创建视图层次结构的原始线程才能接触其视图

这就是为什么我可以从 JSInterface 调用 changeStep 但我可以在我的活动类中......那我该怎么做呢?


解决方案是...

runOnUiThread(new Runnable() {
             public void run() {

                 step = newStep;
                 tvStep.setText("Etape "+step);
                 step_info = getString(R.string.step3_info);



            }
        });

像这样它知道这是主线程的代码。但奇怪的是 Eclipse 把我的虚拟机中止了上面的显式错误...

4

2 回答 2

2

changeStep方法必须在 UI 线程内调用。您可以通过以下方式实现runOnUiThread

addWebsiteActivity.runOnUiThread(new Runnable() {
    public void run() {
        changeStep(step);
    }
})
于 2012-04-27T13:37:21.300 回答
0

在您的代码中将 step 更改为 newStep

于 2012-04-27T13:20:30.853 回答