我正试图从onAtteranceCompleted()中的非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);
  }

问题是,我在尝试做的事情中可能会出现两个错误:
runonuithread方法(runnable)
在类型活动中
适用于参数(无效)
中的方法提示(活动)
MyDialog类型不适用
对于参数(new runnable(){})
我只想通过将对话框创建推迟到一个ui线程来“做正确的事情”,但似乎我缺少了一些基本的东西。
我遗漏了什么,如何完成我试图完成的看似简单的任务?

最佳答案

必须是:

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

它说这不适用于参数(void),因为您正在尝试使用start方法(这是一个void方法)运行线程。runOnUiThread接收一个可运行对象,您不必担心启动它,这是操作系统为您完成的。
关于第二个错误,发生这种情况是因为在这个范围内this是指您正在初始化的Runnable对象,而不是指对活动的引用。所以,你必须明确地说出你指的是什么(在本例中是指什么)。

10-05 19:02