嗯,我终于想通了这个简单的问题。
要在非UI线程上调用Dialog.show(),我需要一个使用Looper.getMainLooper()创建的Handler对象。然后,就像@peedee解释的那样,在run()块中实现要做的事情(与UI相关的工作)。
接收通过对话检索到的数据也不困难。在我的Dialog类中添加一些getter方法,并在显示对话框之前添加一个OnDismissListener是我所需要的。 (OnDismissListener会在对话框的dismiss()函数被调用时作出反应。)
这是我写的代码。希望它可以提供帮助。
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Log.e("TESTRUNNABLE", "RUNNABLE LOADED");
cDialog = new TestDialog(mContext);
cDialog.setTitle("GROUP USER LOGIN");
cDialog.setOnDismissListener(new OnDismissListener(){
@Override
public void onDismiss(DialogInterface dialog) {
// TODO Auto-generated method stub
nameStr = cDialog.getNameStr();
pwStr = cDialog.getPwStr();
Toast.makeText(mContext, nameStr + ", " + pwStr, 3000).show();
Log.e("DISMISSLISTENER", nameStr + ", " + pwStr);
}
});
cDialog.show();
}
}, 0);
不可思议!将这个代码块添加到我的适配器类中是否解决了整个问题?我的意思是,我需要更多东西吗? – March3April4 2015-02-09 11:26:15
那么你仍然需要弄清楚如何将信息返回到原始线程。我想你需要一些UI线程可以调用的公用方法来存储用户的值。 – peedee 2015-02-09 11:31:48