0

アクティビティに JSInterface を持つ WebView があります。

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がVMの中止をスローするのは奇妙です...

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 に答える