如题。我写的代码如下:
public class DialogActivity extends Activity{ @Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
new Thread(new TestThread(this)).start();
}
}
class TestThread implements Runnable{
public TestThread(DialogActivity da){
this.da = da;
}

@Override
public void run() {

int count = 0;
while(count++<10){
dialog();
}
}

protected void dialog() {
  AlertDialog.Builder builder = new Builder(da);
  builder.setMessage("确认退出吗?");
  builder.setTitle("提示");
  builder.setPositiveButton("确认", new OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    dialog.dismiss();
    da.finish();
   }
  });
  builder.setNegativeButton("取消", new OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    dialog.dismiss();
   }
  });
  builder.create().show();
}

private DialogActivity da = null;
}

解决方案 »

  1.   

    AlertDialog只能在UI线程内创建  可以发消息给主线程叫主线程去创建
      

  2.   

    谢谢你,请问有没有方法可以让UI线程中对UI的操作下放给子线程?
      

  3.   

    可以在主线程内定义一个Handler用来处理消息 Handler hmessage=new Handler()
    {
    @Override
    public void handleMessage(Message msg) {
    // TODO Auto-generated method stub
    if(msg.what==SHOW_DIALOG)
    {
    //dialog();
    Toast.makeText(DialogActivity.this, "333", Toast.LENGTH_LONG).show();
    }
    super.handleMessage(msg);
    }
    };
    然后线程内用hmessage.sendEmptyMessage(SHOW_DIALOG);消息处理是在主线程的就不会报错了
      

  4.   


    那就是Dialog不在UI中创建不行,是吧?
      

  5.   


    非ui线程是不能操作ui的。一般通过handler发送消息给ui线程,然后在ui线程更新界面。
      

  6.   

    结贴快了 还是要更正下我说错了 AlertDialog是可以在线程中使用的 线程有自己的消息列队就可以了
    我试了下这样是可以的
              Looper.prepare();
               dialog(); 
       Looper.myLooper().loop();
      

  7.   

    [Quote=引用 7 楼 fontlose 的回复:]引用 6 楼 a295623449 的回复:引用 5 楼 mylzc 的回复:引用 4 楼 a295623449 的回复:引用 3 楼 fontlose 的回复:引用 2 楼 a295623449 的回复:引用 1 楼 fontlose 的回复:AlertDialog只能在UI线程内创建  可以发消息给主线程叫主线程去创建谢谢你,请问有没有……
    [/Quote好的,知道了。