2011-12-10 17 views
4

予期しない時に呼ばれている、私が持っているonActivityResult()は私の主な活動で

@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); 
} 

しかし、「いわゆる」トーストとすぐに私の「設定」の活動を開始して起こる、私はそれが終わったときのnstead。私はこれで今かなりの時間を費やしてきました。どんな助けもありがとうございます。ありがとう。

答えて

14

設定アクティビティのマニフェストで起動モードがsingleTaskに設定されている可能性があります。これにより、startActivityForResult()を呼び出すと即座にキャンセル応答が得られます。

このメソッドは、 が結果を返すように定義されているインテントプロトコルでのみ使用されることに注意してください。他のプロトコル( ACTION_MAINやACTION_VIEWなど)では、 が期待される場合に結果が得られないことがあります。たとえば、の起動中のアクティビティが シングルタスク起動モードを使用している場合、そのタスクでは実行されないため、すぐにキャンセル結果が に送信されます。

startActivityForResult() documentation

+0

からのご返信ありがとうございました。 launchModeは実際には "singleInstance"に設定されていて、動作していませんでした。私は好奇心のために、あなたの答えを読んだ後、それを 'android:launchMode =" singleTask "'に変更しました。しかし、今、文書を読んで、私はそれが他のデバイスで動作するかどうか心配です。 – user1032613

+0

'singleInstance'が' singleTask'とほぼ同じであるため、この問題を引き起こす可能性があります。しかし、正直言って、なぜこれが 'singleTask'で動作するのかわからないので、これが他のデバイスで同じように動作するかどうかはわかりません。 –

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