2016-07-13 5 views
1

私はAndroidプログラミングの初心者です。アクティビティA:Cを開始するBを開始します。なぜCの戻るボタンを押してAに戻るのですか?

私はSecondActivity開始そこからMainActivityありますThirdActivityで

[...] 
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class); 
startActivityForResult(intent, SecondActivity.REQUEST_SELECT); 
[...] 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    //this method is never called 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == SecondActivity.REQUEST_SELECT) { 
     [...] 
    } 

:SecondActivityで

[...] 
Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
intent.putExtra("mode", eTravelEditMode.Create); 
startActivityForResult(intent, MainActivity.REQUEST_CREATE); 
[...] 

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

    if (requestCode == MainActivity.REQUEST_CREATE) { 
    } 
} 

を、私はThirdActivityを開始

@Override 
public void onBackPressed() { 

    Intent intent = new Intent(); 
    //intent.putExtra("returnValue", (Serializable) mAdapter.getSelectedValues()); 
    setResult(SecondActivity.RETURN_SELECT, intent); 

    super.onBackPressed(); 
    this.finish(); 
} 

からThirdActivity私は、戻るボタンを押すと、その親SecondActivityに値を返したいと思います。 しかし、SecondActivity.onActivityResultは決して呼び出されません。 MainActivity.onActivityResultが呼び出されます。

何が問題なの?

+0

SecondActivity ..のどこでも 'finish()'を呼び出していますか? – Vucko

+0

2番目のアクティビティがどこかで破壊されています。 – user3765370

+0

@vucko:2番目のアクティビティでfinish()コールがありません – kevinob

答えて

2

あなたがAndroid用に開発している経験があるにもかかわらず、処理の意図とアクティビティスタックの管理が難しい場合があります。一般的に言えば、アプリのロジックを進めるには、戻るボタンを押す必要はありません。

  1. 、について説明:あなただけ finish()を呼び出し、ThirdActivityから戻っSecondActivityに移動したい場合は、startActivityForResultを用いた第3 活動を始めてから、あなたのためにそれを行います(意図私が持っている3ポイントがあります。 )対 startActivity(インテント)を使用しています。だからあなたのコードで起こっていることは、あなたが実際にアンドロイドのバックスタック ナビゲーションシステム、を介して戻って行くこと だと思いますfinish()を介して再び行く。だからあなたの帰りは2回くらいです。それが主な活動に戻る理由です。おもう。アクティビティスタックとバックナビゲーションについて

    詳細情報はこちら を見つけることができます: https://developer.android.com/training/implementing-navigation/temporal.html

  2. 提案:ボタンを追加してみてくださいし、そのボタン用のonClick()メソッドで あなたfinish()を持っているのではなく、アンドロイドのバックナビゲーションを使用します。私は離れてあなたのアプリの進歩の方法の のように戻るボタンを使用して滞在するだろう。
  3. 提案:ユーザーが ActivityThreeに、バックActivityTwoにActivityTwoから行くことになる論理的ならば、私は( は、一般的にそれはstartActivityForResultのために何をしたいですので、 finish()は、アプリのロジックで自然な成り行きことだろうどちらかインテント)vs startActivity(インテント)。
+0

これまでのところあなたの答えは最高だと思います。しかし、 'finish()'を呼び出すことは非常に健康的な選択ではありません。この記事では、アクティビティ階層について説明します。これを行う適切な方法は、親アクティビティ – Chisko

+0

を真に宣言することですが、私の解釈は、kevinobが結果を出す目的で3番目のアクティビティを開始したかったので、バックボタンを使用しないでください。 'finish()'を使うだけです。とはいえ、 'startActivityForResult()'を使ってアクティビティを開始すると、 'finish()'を使うことは、そのアクティビティのライフサイクルを終了させる正しい方法でしたか? –

+1

'finish()'はとても良い選択です。それ以上に、この場合は正しい選択です。親アクティビティは、「上のナビゲーション」のために、何か別のものに使用されます。 –

-2

お試しください!

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent intent = new Intent(CurrentActivity.this, A.class); 
    startActivity(intent); 
} 
+1

アクティビティを積み上げるだけです。これは完全な解決策ではありません。 – Chisko

0

私はAndroidManifestを見ました。xml:

<activity android:name=".forms.SecondActivity" 
      android:label="@string/mylabel" 
      android:noHistory="true" 
> 

「android:noHistory = "true"」を削除しましたが、すべてがスムーズに機能します。 helloworldからのコピー/ペースト私は混乱していると思います! :) ありがとう

関連する問題