2017-02-05 1 views
0

と一致していません。 REQUEST_CODE_SELECTED_OPTIONQuestionActivity終了後1アンドロイドsetResultは、私は2つのアクティビティが含まれクイズアプリに取り組んでいますonActivityResult

に定数セットである

Intent questionIntent = new Intent(QuizActivity.this, QuestionActivity.class); 
questionIntent.putExtra("currentQuestion", currentQuestion); 
startActivityForResult(questionIntent, REQUEST_CODE_SELECTED_OPTION); 

場合、それは(選択されたオプションのインデックスを返すべきである:これと同様QuizActivity Iにおいて、QuestionActivityを開くためにstartActivityForResult(Intent, int)方法を使用しましたそれは、複数の選択肢の質問だと仮定した場合)ので、私はonPause()コールバックオーバーライド:

@Override 
public void onPause() { 
    super.onPause(); 
    Intent returnIntent = new Intent(QuestionActivity.this, QuizActivity.class); 
    if (curQuestion.selected()) { 
     returnIntent.putExtra("Result Code", RESULT_OK); 
     setResult(Activity.RESULT_OK, returnIntent); 
     Log.d("QuestionActivity", "Returned with " + Activity.RESULT_OK); 
    } else { 
     returnIntent.putExtra("Result Code", RESULT_CANCELED); 
     setResult(Activity.RESULT_CANCELED, returnIntent); 
     Log.d("QuestionActivity", "Returned with " + Activity.RESULT_CANCELED); 
    } 
} 

私も私の0でonActivityResult(int, int, Intent)コールバックを実装しているが:私はアプリを実行したときに

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d("QuizActivity", "Received result code: " + resultCode); 
    Log.d("QuizActivity", "Result code from intent: " + data.getIntExtra("Result Code", 100)); 
    if (requestCode == REQUEST_CODE_SELECTED_OPTION) { 
     if(resultCode == Activity.RESULT_OK){ 
      Log.d("QuizActivity", "Got RESULT_OK"); 
     } 
     if (resultCode == Activity.RESULT_CANCELED) { 
      // do nothing 
     } 
    } 
} 

はしかし、私はQuestionActivityに結果コードが正しく-1に設定されていることがわかりログから、バックヒット、QuestionActivityに入ったオプションを選択:

D/QuestionActivity: Returned with -1 
D/QuizActivity: Received result code: 0 

しかし、onActivityResult(int, int, Intent)メソッドでは結果コードは0です。また、私はまた、intを返信しようとしましたが、QuizActivityの受信意図はnullです。私は本当に混乱しています。私は方法を間違って使用していますか?

+0

あなたのかわりにonBackPressedのonPause()で実行する必要があり、なぜsetResult() – arjun

+0

を呼び出す前に –

+0

あなたから 'startActivityForResult'を呼び出していることを確認しテント内のデータを設定していません? 'Fragment'からではなく、アクティビティ自体です。フラグメントから' startActivityForResult 'を実行している場合、' onActivityResult 'がフラグメントのために呼び出されます。詳細については、[this post](http://stackoverflow.com/questions/10564474/wrong-requestcode-in-onactivityresult)を参照してください。 – azizbekian

答えて

3

私はそれを理解しました。アクティビティが完了する前に、このpostとAndroidのドキュメントによると、setResult(int, Intent)メソッドが呼び出されなければなりません(つまり、私はonBackPressed()でそれを入れてみましたが、私はsuper.onBackPressed()と呼ばれるので、最初はうまくいきませんでしたonPause()onStop()、またはonDestroyを呼び出す前に。 。最初の行最後に、これは働いていた:

@Override 
public void onBackPressed() { 
    Intent returnIntent = new Intent(QuestionActivity.this, QuizActivity.class); 
    if (curQuestion.selected()) { 
     returnIntent.putExtra("Result Code", RESULT_OK); 
     setResult(Activity.RESULT_OK, returnIntent); 
     Log.d("QuestionActivity", "Returned with " + Activity.RESULT_OK); 
    } else { 
     returnIntent.putExtra("Result Code", RESULT_CANCELED); 
     setResult(Activity.RESULT_CANCELED, returnIntent); 
     Log.d("QuestionActivity", "Returned with " + Activity.RESULT_CANCELED); 
    } 
    super.onBackPressed(); 
} 
+0

はい。今あなたは軌道に乗っています:D –

関連する問題