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