5

ボタン ハンドラーから startActivityForResult() を使用してアクティビティを起動していますが、ターゲット アクティビティの onCreate() がヒットする前であっても、onActivityResult() が即座に呼び出されています。

public void onGraphNext (View target) {
    Intent i = new Intent(this, AddCommentActivity.class);
    startActivityForResult(i,6);    // 6 is arbitrary request code               
}    

. . .

protected void onActivityResult(int requestCode, int resultCode,
        Intent returnData) {
   if  ( (resultCode == RESULT_OK) && (requestCode == 6) ) {
   Bundle extras = returnData.getExtras();
   comment = extras.getString("comment");
     }
} 

返される結果コードは 0 で、リクエスト コードは 6 です。StackOverflow の他の場所で、この問題を報告しているのを見たことがありますが、解決策は、マニフェストの launchMode に singeInstance を使用しないことでした。しかし、私は標準を使用しています。. .

<activity android:name="AddCommentActivity"
          android:configChanges="orientation"
          android:screenOrientation="portrait"
          android:launchMode="standard"></activity>  

洞察を事前にありがとう!

編集: 簡単なテスト プログラムを作成しました。呼び出し元 (「ランチャー」) - onActivityResult を持つアクティビティ - が singleInstance であり、呼び出されるアクティビティ (「起動」) が標準の場合、問題を確実に再現できます。つまり、

<activity android:name="Launcher"
          android:screenOrientation="portrait"
          android:launchMode="singleInstance"></activity> 

<activity android:name="Launchee"
          android:screenOrientation="portrait"
          android:launchMode="standard"></activity>  

実際のアプリでは、他の理由で呼び出されたものは singleInstance である必要がありますが、ユーザー入力を要求するために他のアクティビティを開始するボタンが必要なため、これは私にとって問題です。startActivityForResult を使用できない場合、これを行うにはどうすればよいですか?

4

1 に答える 1