我有一个对话框主题活动,它只包含一个带有单个TextView的ProgressBar。该活动的代码如下所示:
public class ProgressDialog extends Activity{
TextView msg;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.progress_dialog);
msg = (TextView)findViewById(R.id.progressMsg);
progressBar = (ProgressBar)findViewById(R.id.progressBar);
Intent intent = getIntent();
String msgString = intent.getStringExtra("msg");
msg.setText(msgString);
}
}
这代表了一个ProgressBar对话框,我将用于我的项目,这样我就可以在所有Android版本上拥有相同的外观和简单易用的对话框。
问题是,如果我在AsyncTask onPostExecute()
方法中将其作为常规活动启动,如何从onPreExecute()
方法完成此活动。 AsyncTask在另一个Activity中调用。我尝试了不同的东西,但没有成功。我试过了:
请帮忙!如果您需要一些额外的代码,请告诉我们!
祝你好运!
答案 0 :(得分:2)
在调用活动中沿着这些行编写一个方法并调用它来删除对话框:
private void removeDialog() {
Intent removeDialogIntent = new Intent(this, ProgressDialogActivity.class).setAction(ACTION_CLOSE_DIALOG);
startActivity(removeDialogIntent);
}
在progressDialogActivity中确保处理它:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (ACTION_CLOSE_DIALOG.equals(intent.getAction())){
finish();
}
}
您可以停止服务或任何其他上下文中的活动,只需将相关标志添加到意图中。
话虽如此,我个人会使用DialogFramgent并避免所有这些混乱,为什么你需要一个对话活动......?
答案 1 :(得分:-1)
如果您使用的是AsyncTask,为什么不在AsyncTask ProgressDialog
中启动onPreExecute
?
也许你可以尝试这样的事情:
private class BackgroundTask extends AsyncTask <Void, Void, Void> {
private ProgressDialog dialog;
public RecordAndAlignTask(MyMainActivity activity) {
dialog = new ProgressDialog(activity);
}
@Override
protected void onPreExecute() {
dialog.setMessage("Doing something, please wait.");
dialog.show();
}
@Override
protected void onPostExecute(Void result) {
if (dialog.isShowing()) {
dialog.dismiss();
}
}
或者,如果您想在此活动中显示它,也许您应该只使用
progressBar.show();
然后在加载完成后执行解除。
if (dialog.isShowing()) {
dialog.dismiss();
}