2012-10-02 60 views
0

我試圖顯示旋轉進度對話框,直到我的活動調用方法finish()。我在調用finish()之前調用progressDialog.show()。我可以看到微調,但它不是在旋轉......有什麼建議嗎?android顯示旋轉進度對話框,直到完成活動

我試圖把finish()和其他activity的onActivityResult()調用的東西放在後臺線程中,所以ui線程不應該做任何事情。 當我正在調試並且在另一個線程(而不是主線程)上的finish()方法中等待時,進度對話框正在旋轉......當我更進一步並調用finish()方法時,進度對話框停止旋轉1-2秒後活動消失。

所以我唯一的建議是finish()方法是不移動進度對話框的原因......有沒有可能讓它移動?

在此先感謝!

編輯: 該代碼在活動A內完成。

private void goBack() { 
    setResult((mReopen) ? Constants.RESULT_REOPEN : RESULT_OK); 
    if (mReopen) { 
     mProgressDialog.show(); 
    } 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      finish(); 
     } 
    }).start(); 
} 

該代碼是開始活動A.

@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { 
    if (requestCode == Constants.REQUEST_CODE_OPEN_EMAG) { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       switch (resultCode) { 
        case Constants.RESULT_REOPEN: 
         mReopen = true; 
         openEmag(mLastOpenedEmagId, false, false); 
         break; 
        default: 
         mReopen = false; 
         break; 
       } 
      } 
     }).start(); 
    } 
} 

正如你可以看到所有的東西被調用在不同的線程比UI線程活動B的內部。

+1

你需要加入一些代碼,以便人們可以看到你在做什麼。 –

回答

0

finsih()停止您的活動並退出它。 你是什麼意思後臺線程* s *?

對於繁重的操作,您應該有一個後臺線程,並在該線程結束時調用finish()。

像這樣:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == yourCode) { 
     if (resultCode == RESULT_OK) { 
      //... Do dialog.show() here 
      new Thread(){ 
       public void run() { 
        //... Your stuff here 
        finish(); 
       }; 
      }.start(); 
     } 
    } else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 
+0

是的,這正是我正在做的,請參閱編輯代碼 –

+0

new Thread ... finish()...將立即執行完成。而且,由於您在模態活動中啓動對話框,因此finish()會在show()後立即調用,因此它不會顯示很長時間。 –

+0

在新的線程()..你應該把長期運行的代碼,應該在後臺運行(如我的例子),並在代碼完成後調用線程完成(我的例子再次)。另一方面,應該在UI線程上啓動對話框。 –

相關問題