我的活动中有一个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);
这可能以适当的方式做到吗?
由于
只有创建视图层次结构的原始线程才能触及其视图
Taht为什么我可以从JSInterface调用changeStep,但我可以在我的活动类中...我怎么能这样做呢?
解决方案是......
runOnUiThread(new Runnable() {
public void run() {
step = newStep;
tvStep.setText("Etape "+step);
step_info = getString(R.string.step3_info);
}
});
像这样它知道它是主线程的代码。但是奇怪的是,Eclipse把我的VM中止,以及上面明确的错误...
答案 0 :(得分:2)
changeStep
方法。您可以使用runOnUiThread
:
addWebsiteActivity.runOnUiThread(new Runnable() {
public void run() {
changeStep(step);
}
})
答案 1 :(得分:0)
在代码中将步骤更改为newStep