嗯,我終於想通了這個簡單的問題。
要在非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