2011-12-10 50 views
4

在我的主要活動,我有:onActivityResult()被調用在一個意想不到的時間

Intent settings_intent = new Intent(this, SettingsActivity.class); 
    settings_intent.putExtra("SomeID", some_int); 
    startActivityForResult(settings_intent, 1); 

,然後在我的SettingsActivity,我有:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    // pass back settings: 
    Intent data = new Intent(); 
    data.putExtra("SomeThing", some_number); 
    setResult(200, data); 
    finish(); 
} 

最後,我推翻在我的主要活動如下:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    makeToast("called"); 
    super.onActivityResult(requestCode, resultCode, data); 
} 

然而,「所謂的」敬酒一旦發生,因爲我的「設置」活動開始,我而不是當它完成時。現在我已經花了很長時間了。任何幫助表示讚賞。謝謝。

回答

14

您的設置活動很可能已將其啓動模式設置爲清單中的singleTask。當致電startActivityForResult()時,這會導致立即取消響應。

請注意,此方法只能與定義爲返回結果的定義協議 一起使用。在其他協議(如 ACTION_MAIN或ACTION_VIEW)中,當您期望 時可能不會得到結果。例如,如果您啓動的活動使用 singleTask啓動模式,它將不會在您的任務中運行,因此您將立即收到取消結果。

startActivityForResult() documentation

+0

非常感謝您的回覆。 launchMode實際上被設置爲「singleInstance」,並且它不起作用。只是好奇心,我在閱讀你的答案後將它改爲了'android:launchMode =「singleTask」',它出人意料地工作。但現在閱讀文檔,我擔心它是否可以在其他設備上使用。 – user1032613

+0

我看到'singleInstance'也可以導致這種情況,因爲它幾乎和'singleTask'一樣。但說實話,我不知道爲什麼它會與'singleTask'一起工作,所以我不能告訴你這是否和其他設備一樣。 – 2011-12-10 22:29:26

-1
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode==1) 
     makeToast("called"); 
    super.onActivityResult(requestCode, resultCode, data); 
} 
相關問題