在我的AsyncTask的doInBackground函数中,我调用它来显示一个确认对话框:
BroadcastAppearanceJob
在doInBackground()中调用上面的函数后,我开始一个新的活动。问题是,由于它是异步的,所以它不会等待上述功能完成。我只能看到弹出窗口然后关闭。怎么解决这个问题?
void CreateOKDialog(final String message)
{
runOnUiThread(new Runnable() {
@Override
public void run()
{
AlertDialog.Builder builder = new AlertDialog.Builder(trip.this);
builder.setTitle(message);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
}
编辑:
CreateOKDialog("Trip cancelled");
startActivity(new Intent(trip.this, login.class));
我正在调用此函数:
void CreateOKDialog( String message)
{
AlertDialog.Builder builder = new AlertDialog.Builder(trip.this);
builder.setTitle(message);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
它仍然没有等我按OK,只是弹出并消失。
答案 0 :(得分:1)
在异步任务中重载onPostExecute并在其中编写对话框和目标代码
答案 1 :(得分:0)
使用AsyncTask执行类似的操作
public YourAsyncTask extends <X, Y, Z>{
public interface TaskDoneCallback{
void onTaskDone();
}
private TaskDoneCallback mCallback;
public YourAsyncTask(TaskDoneCallback callback){
mCallback = callback;
}
@Override
public Z doInBackground(X... params){
// your stuff
}
@Override
protected void onPostExecute(Z result){
if(mCallback != null)
mCallback.onTaskDone();
}
}
然后从你的活动
new YourAsyncTask(new TaskDoneCallback(){
@Override
public void onTaskDone(){
AlertDialog.Builder builder = new AlertDialog.Builder(trip.this);
builder.setTitle(message);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
startActivity(new Intent(trip.this, login.class));
}
});
AlertDialog alert = builder.create();
alert.show();
}).execute(x);
发生的事情是AsyncTask将执行,而onPostExecute它将触发您传递给Activity的构造函数的回调。反过来,这将从在活动中构建对话框。 然后在积极的onClick响应中,将触发新活动。
最后,您需要了解命名约定。类应该是UpperCamelCase,它们很重要,确保人们不要让它们与变量混淆:)