2010-12-03 10 views
9

私のアプリケーションでは、ステップ1からステップ8までのデータが渡されるランディングページから8ステップの「ウィザード」を開始します。ステップでは、どちらのアクティビティでもfinish()を呼び出しません。しかし、すべてのステップが完了したら、開始した8つのアクティビティをすべて終了してリンク先ページに戻る方法がありますか?ボタンをクリックした後にアクティビティを閉じる

ここである種の例示:

ホーム - ステップ1 - > 2 - > 3 - > 4 - > 5 - > 6 - > 7 - この時点で> 8

、ユーザ「保存」をクリックし、すべてのステップを終了し(8)、ホームページに戻ります。私は今までこれを行う新しい意図を作り出してきましたが、これは最善の解決策ではないことを認識しています。シンプルなバックプレスは彼を第7ステップに戻します。

助けてください。

+0

「間にまだデータを保持するために」...これが何を意味しているか正確にはわかりませんが、AndroidがAndroidに組み込まれた後でアクティビティの1つが閉じられないことを保証することはできませんバックグラウンド。あなたがそこにいることに依存していないことを確認してください。 –

+0

@Mayra:とにかく、Androidがすべての活動を終了するのを防ぐことができますか?私はステップが2分以上、理想的には少なくともかかるとは思わない。しかし、決してあまり確かなことはありません。 –

+1

いいえ、できません。詳細については、ライフサイクルライフサイクルのドキュメントをチェックしてください。http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle誰かがあなたのアプリを離れて来てそれに戻る。 –

答えて

20
Intent intent = new Intent(this, Home.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

これにより、8番目の画面からその間のすべてのアクティビティが強制終了され、ホーム画面が表示されます。また、あなたは、マニフェストのlaunchmode = "singleTop"でurホーム画面の機能を設定することができます。このリンクを参照してください。developer.android.com/guide/topics/fundamentals.html#acttask

+0

ありがとうVarun。それは魅力のように働いた。ちょうど私が探していたもの。再び簡単な質問。 launchmode = "SingleTop"パラメータでマニフェスト内のHomeアクティビティを設定すると、何が行われますか? –

+0

上記のコードを使用すると、ホーム画面のアクティビティの新しいインスタンスが起動します。しかし、ホーム画面のlaunchmodeをsingeTopとして設定すると、活動のインスタンスが1つしか存在せず、目的がonNewIntentに渡されます(活動の方法。 – Varun

4

また、StartActivityForResult(...)を使用して各アクティビティを開始し、アクティビティにfinish()の前にsetResult()を呼び出す方法があります。次に、各アクティビティのonActivityResult(...)メソッドで、インテントがnullでない場合はfinish()をコールします。

これは完全なスタックを作成し、前回の終了時に自動的にチェーンで終了します。

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

    if (data == null) { 
     return; // back button, resume this activity 
    } 

    // Propagate result down the stack. 
    setResult(0, data); 
    finish(); 
} 

これはもう少しコントロールを提供し、元の活性は、むしろ元の要求は、あなたがそのスタートに(保存したい他の状態を持っている場合は、より直感的かもしれません作成の意図、よりonActivityResultを経由して、結果を受け取ることができますインテント、特に)。

+0

私の状況下では、これはうまくいかない。あなたのソリューションを使用してください。しかし、この場合、私が言及したステップは、情報を収集するフォームに似ており、コンテンツは一方向にしか渡されません。確かに別の状況でそれを使用します。 –