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

问题是我正在尝试做的事情有两个错误:

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

它说这不适用于参数(void),因为您正在尝试使用 start 方法(这是一个 void 方法)运行线程。runOnUiThread接收一个可运行的对象,您不必担心启动它,这是由操作系统为您完成的。

关于第二个错误,它发生是因为在该范围内this是指Runnable您正在初始化的对象,而不是对活动的引用。因此,您必须明确说明this您指的是什么(在这种情况下YourActivityName.this)。

于 2011-03-31T02:42:07.390 回答