2

ボタンのクリックに基づいて、時間がかかるいくつかの処理を行う必要があります。そこで、メインの UI スレッドとは別のスレッドでこれを行うことにしました。

ここで、別のスレッドでの計算に基づいて、この新しいスレッドが作成された元の UI スレッドのメイン クラスで関数を呼び出します。この関数では、UI を更新します。メイン UI スレッドを呼び出す必要があるため、これは機能しないと言われました。

誰かがこれで私を助けてくれますか?

@Override
public void onListItemClicked(int index, Map<String, Object> data) {

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Issue command() on a separate thread
            wasCommandSuccess(command());
        }
    }).start();
}


private void wasCommandSuccess(boolean result){
    if (result == false){
        getUI(BasicUI.class).showAlert("Command failed!", "Unable to access");
    }
}
4

1 に答える 1

1

runOnUiThread(); で関数 wasCommandSuccess を呼び出す必要があります。したがって、次のようなコードが必要です。

@Override
public void onListItemClicked(int index, Map<String, Object> data) {

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Issue command() on a separate thread
            final boolean result = command();
            // you need to pass your context (any of Activity/Service/Application) here before this
            context.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    wasCommandSuccess(result);
                }
            });
        }
    }).start();
}


private void wasCommandSuccess(boolean result){
    if (result == false){
        getUI(BasicUI.class).showAlert("Command failed!", "Unable to access");
    }
}
于 2013-04-10T09:29:02.297 に答える