如何关闭对话主题活动

时间:2014-09-13 14:43:36

标签: android android-asynctask dialog android-theme activity-finish

我有一个对话框主题活动,它只包含一个带有单个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中调用。我尝试了不同的东西,但没有成功。我试过了:

  • 模拟背面按钮
  • 使用fragmentManager和activityManager
  • 在Activity中实现调用活动的finish()方法的公共方法

请帮忙!如果您需要一些额外的代码,请告诉我们!

祝你好运!

2 个答案:

答案 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();
        }

See tutorial