Метод runOnUiThread (Runnable) в типе Activity не применим для аргументов (void) - PullRequest
4 голосов
/ 31 марта 2011

Я пытаюсь создать диалог из потока, не являющегося пользовательским интерфейсом, в onUtteranceCompleted ():

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);     
  }

Проблема в том, что я получаю две ошибки для того, что пытаюсь сделать:

  1. Метод runOnUiThread (Runnable) в типе Activity не применим дляarguments (void)
  2. Метод Prompt (Activity) в типе MyDialog не применим для аргументов (new Runnable () {})

Все, что я хотел - это сделать этоправильно ", откладывая создание диалога в поток пользовательского интерфейса, но кажется, что мне не хватает чего-то фундаментального.

Чего мне не хватает и как мне выполнить, казалось бы, простую задачу, которую я пытаюсь достичь?

1 Ответ

11 голосов
/ 31 марта 2011

Это должно быть:

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

Это говорит о том, что не применимо для аргументов (void) , потому что вы пытаетесь запустить поток, используя метод start (который являетсянедействительный метод).runOnUiThread получает работающий объект, и вам не нужно беспокоиться о его запуске, это делается операционной системой за вас.

Что касается второй ошибки, это происходит потому, что в этой области действия thisссылается на инициализируемый вами объект Runnable, а не на действие.Итак, вы должны явно указать, на что this вы ссылаетесь (в данном случае YourActivityName.this).

...