2011-03-31 80 views
4

我试图创建一个非UI线程一个对话框,在onUtteranceCompleted():方法runOnUiThread(Runnable接口)的类型活动不适用于参数(无效)

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

提示( )是类MyDialog简单静态方法:

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

的问题是,我得到凸轮两个错误了什么,我试图做的:

  1. 方法runOnUiThread(可运行) 在类型活性不 适用在 类型MyDialog参数(无效)
  2. 方法提示符(活性)是不适用 为参数(新的可运行() {})

所有我想要的是“做正确”通过延迟对话框创建一个UI线程,但现在看来,我失去了一些东西根本。

我错过了什么,如何完成我试图实现的看似简单的任务?

回答

11

它必须是:

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

它说不适用的参数(无效)因为你试图运行使用的启动方法(这是一种无效的方法)的线程。 runOnUiThread接收到一个可运行的对象,您不必担心启动它,这是由操作系统为您完成的。

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

+0

你是天才。非常感谢! – an00b 2011-03-31 03:04:11

+0

看来你只能从Activity中使用runOnUiThread,没有别的。 – 2012-12-01 01:07:57

+0

是的,没错,这是唯一一个使用它的地方。 – Cristian 2012-12-01 17:33:27

相关问题