2017-05-29 100 views
1

如何在progressdialog dimiss上打開新活動?ProgressDialog關閉打開新活動

這裏是我的部分代碼:

  @Override 
     public void onClick(View v) { 
      progressDoalog = new ProgressDialog(Hack.this); 
      progressDoalog.setMax(100); 
      progressDoalog.setMessage("Its loading...."); 
      progressDoalog.setTitle("ProgressDialog bar example"); 
      progressDoalog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      progressDoalog.show(); 
      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         while (progressDoalog.getProgress() <= progressDoalog 
           .getMax()) { 
          Thread.sleep(200); 
          handle.sendMessage(handle.obtainMessage()); 
          if (progressDoalog.getProgress() == progressDoalog 
            .getMax()) { 
           progressDoalog.dismiss(); 
          } 
         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }).start(); 
     } 

     Handler handle = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       super.handleMessage(msg); 
       progressDoalog.incrementProgressBy(1); 
      } 
     }; 
    }); 
} 

請幫我傢伙。我認爲這是在進度完成後打開活動的一個解決方案。

+0

[您可以觸發事件的可能的複製時,Android的對話框關閉?](https://stackoverflow.com/questions/6203720/can-you-fire-an-event-when-android-dialog-is-dismissed) – EKN

回答

1

只需添加:

progressDoalog.setOnDismissListener(new DialogInterface.OnDismissListener(){ 
      @Override 
      public void onDismiss(DialogInterface dialog) { 
       //Launch your activity 
      } 
     }); 

這是一個簡單的監聽器,當你的對話框駁回

+0

我試過了:https://pastebin.com/3WXrkEH4和我的應用程序崩潰了 –

+0

在進度之前需要進行空值檢查進度doalog.setOnDismissListener() – EKN

+0

@EKN對不起,我是新手,你是什麼意思?你能在我的腳本上看到我嗎? –

0

您可以使用它被稱爲AsyncTask

有中的AsyncTask覆蓋3種重要方法。

  1. doInBackground:這是會發生的後臺處理的肉。
  2. onPreExecute:顯示你的ProgressDialog在這裏(的ShowDialog)
  3. onPostExecute:隱藏在這裏您ProgressDialog(removeDialog或dismissDialog)

如果你讓你的AsyncTask子類作爲一個內部類的活動,那麼你可以在你的AsyncActivity中調用框架方法showDialog,dismissDialog和removeDialog。

這裏的AsyncTask的樣本實現:

class ProgressTask extends AsyncTask<String, Integer, Boolean> { 
    @Override 
    protected Boolean doInBackground(String... params) { 
    try { 
     Thread.sleep(4000); // Do your real work here 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    return Boolean.TRUE; // Return your real result here 
    } 
    @Override 
    protected void onPreExecute() { 
    showDialog(AUTHORIZING_DIALOG); 
    } 
    @Override 
    protected void onPostExecute(Boolean result) { 
    // result is the value returned from doInBackground 
    removeDialog(AUTHORIZING_DIALOG); 
    Intent i = new Intent(this, LandingActivity.class); 
    startActivity(i); 
    } 
} 
0

@MarkusMaleńki請參考下面的代碼

if(progressDoalog!=null && progressDoalog.isShowing()){ 
    progressDoalog.setOnDismissListener(new 
    DialogInterface.OnDismissListener(){ 
    @Override 
    public void onDismiss(DialogInterface dialog) { 
    //Launch your activity 
    } 
}); 

}

+0

我有一個問題。 isShowing無法解析該符號 –

+0

檢查您是否導入了android.app.ProgressDialog;在你的課 – EKN

+0

我在我的答案做了一個小的修改,其實isShowing()是一個函數,我忘了添加函數參數沿着isShowing,抱歉的錯誤。 – EKN