4

onUtteranceCompleted() で非 UI スレッドからダイアログを作成しようとしています。

runOnUiThread(
    new Thread(new Runnable() {
      public void run() { MyDialog.Prompt(this); }
    }).start());

Prompt() は、クラス MyDialog の単純な静的メソッドです。

  static public void Prompt(Activity activity) {
    MyDialog myDialog = new MyDialog();
    myDialog.showAlert("Alert", activity);     
  }

問題は、私がやろうとしていることに対して2つのエラーが発生することです:

  1. タイプ Activity のメソッド runOnUiThread(Runnable) は引数に適用できません (void)
  2. タイプ MyDialog のメソッド Prompt(Activity) は引数に適用できません (new Runnable(){})

私が望んでいたのは、ダイアログの作成を UI スレッドに延期することによって「正しく行う」ことだけでしたが、根本的な何かが欠けているようです。

何が欠けているのか、達成しようとしている一見単純なタスクをどのように達成するのですか?

4

1 に答える 1

11

それは違いない:

runOnUiThread(new Runnable() {
      public void run() { MyDialog.Prompt(NameOfYourActivity.this); }
    });

start メソッド (void メソッド) を使用してスレッドを実行しようとしているため、引数 (void) には適用できません。runOnUiThread実行可能なオブジェクトを受け取り、それを開始することを心配する必要はありません。これは OS によって行われます。

2 番目のエラーに関しては、そのスコープでは、アクティビティへの参照ではなく、初期化中thisのオブジェクトを参照しているために発生します。Runnableしたがって、何thisを参照しているのかを明示的に伝える必要があります (この場合はYourActivityName.this)。

于 2011-03-31T02:42:07.390 に答える