2014-10-03 64 views
0

我已經在setResult(RESULT_OK,intent)中工作了一段時間,並且遇到了一些奇怪的事情。setResult作品大部分時間爲

大部分時間,約我用下面的代碼這始終是執行從它進入一個活動,然後退出時間3/4:大部分

Intent intent = new Intent(); 
intent.putExtra(KEY_ENVIRONMENT_SURVEY, esurvey);  
setResult(RESULT_OK, intent); 
finish(); 

在活動中被送回,時間RESULT_OK被返回,但有時RESULT_CANCELLED被返回,看起來非常隨機。什麼可能導致這個?完成()可以在esurvey被附加之前被調用(它可以是parcelable),默認是RESULT_CANCELLED?如果是的話我該如何解決這個問題?使用處理程序並使用postDelayed或檢查是否設置了RESULT_OK(我不知道如何執行此操作,因此請指定這是否是解決方案)?

謝謝!

+0

「如果某個子活動由於某種原因(例如崩潰)而失敗,則父活動將收到一個結果,其代碼爲RESULT_CANCELED。」 http://developer.android.com/reference/android/app/Activity.html – 2014-10-03 21:59:08

+0

是的,但大部分時間裏,活動都會按照它的設想(在我看到的logcat中沒有什麼異常)。我想我需要進一步調查,看看這是否是原因。 – 2014-10-04 01:26:45

回答

-1

我正在重新訪問,因爲我在應用程序中發現了小故障。 「後退」按鈕非常接近我指定爲移動到下一個活動的按鈕。我在第一個按鈕之後允許按下按鈕,所以有時候通過觸摸「完成」按鈕來完成活動,但實際上是通過「後退」按鈕導航回來的。

我使用布爾標誌修正了這個問題,在butotn按下時檢查它是否爲真,如果它等於false,則將其設置爲true。

0

嘗試將此代碼移入重寫的finish()方法。這將確保每次活動完成時都會調用它。

@Override 
public void finish() { 
    Intent intent = new Intent(); 
    intent.putExtra(KEY_ENVIRONMENT_SURVEY, esurvey);  
    setResult(RESULT_OK, intent); 
    super.finish(); 
} 
+0

我會試試這個。你認爲這些代碼行中的任何內容都可能導致活動崩潰嗎? – 2014-10-04 01:27:53

+1

@TomMcFarlin號他們是安全的。 – 2014-10-04 07:56:12