0

我有一个对话主题活动,只包含一个ProgressBar与单个TextView。该活动的代码如下所示:如何关闭对话主题活动

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); 

} 

} 

这代表一个进度对话框,使我有相同的外观和方便costumizable对话Android上的所有版本,我会用我的项目。

问题是如何以AsyncTask onPostExecute()方法完成此活动,如果我以onPreExecute()方法将其作为正常活动启动它。 AsyncTask在另一个Activity中调用。我尝试了不同的事情,但没有成功。我想:

  • 模拟背部按键
  • 使用fragmentManager和activityManager
  • 实现在活动的公共方法调用完成()方法用于活动

请帮帮忙!如果你需要一些额外的代码让我知道!

此致敬礼!

+0

完成()不在你的onpostexecute的asynctask工作吗? – 2014-09-13 14:44:11

+0

不需要。因为我需要一个正在运行的对话主题活动的实例来执行此操作。这是主要问题。 – Aksiom 2014-09-13 14:45:09

回答

1

写沿调用活动,这些线路的方法,并调用它来删除对话框:

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并避免所有这些混乱,为什么你需要一个对话活动......?

+0

谢谢你的男人!这正是我所期待的。 – Aksiom 2014-09-13 17:45:40

+0

只为让所有人知道。这是正确的方法,但您必须将launchMode设置为清单中活动的SingleTop。否则,它将重新打开一个带有新意图的对话框。欲了解更多细节看这个答案:http://stackoverflow.com/a/14411650/1425032 – Aksiom 2014-09-14 00:00:42

0

如果您使用的是AsyncTask,为什么不在AsyncTask onPreExecute中启动ProgressDialog

也许你可以尝试这样的事:

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

+0

对不起,这是一个默认的ProgressDialog我不能使用默认的对话框。无论如何,谢谢你。 – Aksiom 2014-09-13 17:48:00