2016-10-30 9 views
2

私が持っている5つの活動、アンドロイドクリア中東活動

- ベースの活動

B、C、D - 通常の活動

E - 最終活動

ABCDE

I AからBへCからDへ、Dは私をEに連れて行きます。私は行動が欲しいです:もし私がDのボタンを押すとCに連れて行かなければなりません。 DからアクティビティEに移動しました。私はバックボタンをEからBに、CとDをスキップする必要があります。

+0

アクティビティEで[onBackPressed](https://developer.android.com/reference/android/app/Activity.html#onBackPressed())をオーバーライドしてAに移動しようとしましたか? –

答えて

1

Eで:

そして今、あなたはちょうどEアクティビティに追加することができ、あなたのケースで(代わりに通常の finish()の) finishAffinity()を呼び出すことで、この活動のいずれかですべてこのグループを終えることができるようになります
@Override 
public void onBackPressed() { 
    Intent intent = new Intent(this, ActivityA.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) | FLAG_ACTIVITY_SINGLE_TOP); 
    startActivity(intent); 
} 

これはBCDEを終え、Aに戻ります。

FLAG_ACTIVITY_SINGLE_TOPを使用すると、Aという既存のインスタンスに確実に戻ることができます。 Aの既存のインスタンスも終了して新しいインスタンスを作成したい場合は、単にFLAG_ACTIVITY_SINGLE_TOPを削除してください。

+0

ありがとうございます。これはまさに私が探していたものです –

1

あなたが出ているアクティビティを追跡するために静的変数を使用できます。その後、onBackPressedをオーバーライドしてその変数をチェックし、適切なアクティビティに移動します。次のようなものがあります。

public static Boolean skipActivities = false; 

DからDを開始すると、それをtrueに設定します。

@Override 
public void onBackPressed() { 
    if (skipActivities){ 
     //start activity A, skipActivities should be reset to false also 
    } else { 
     super.onBackPressed(); 
    } 
} 
+0

これに 'static'変数を使用するのは間違った方法です。これは悪いアーキテクチャです。 OPが望んでいるものを正確に行う簡単な 'Intent'フラグがあります。恐ろしい答えです。 –

0

することができます "グループ" あなたの活動、affinityを使用して:あなたの活動のEの場合。 したがって、マニフェストファイルでアクティビティB、C、D、Eにandroid:taskAffinity="activity.normal"を追加します。

@Override 
public void onBackPressed() { 
    finishAffinity(); 
    super.onBackPressed(); 
} 
+0

この目的のために 'taskAffinity'を使うことはまったく間違っています。それだけでなく、この機能はAPIレベル16以上に存在します。マニフェストのさまざまなアクティビティで異なる 'taskAffinity'を指定すると、アプリケーションの2つのタスクがすぐに終了します。これは確かにあなたが望むものでもなく、ユーザーが期待するものでもありません。これを実行する前に完全に理解する必要があるワームの大きな缶が開きます。 OPが望むものを正確に行うための単純な「Intent」フラグがあり、APIレベル1以上で動作します。 –

+0

ありがとう!そのような旗について知らなかった! –