6

Android アプリケーションのバック スタックを次のように変更したいと思います。

今のところ、以下の流れです。

A -> B -> C -> D -> E -> F

ユーザーがアクティビティ F に移動すると、スタックから D と E が消去されるように、バック スタックを変更できるようにしたいと考えています。ということで、背中打ったらF→Cの流れ。

また、ユーザーは F からアクティビティ B に進むことができます。これにより、C、D、E、および F も消去されます。

スタックをクリアしたり、一番上のアイテムを削除したりできるという情報を見てきましたが、アクティビティがトリガーされたときに、スタックからいくつかのアイテムを削除したいと考えています。

どんな助けでも大歓迎です、どうもありがとう。

4

2 に答える 2

10

F から C へのフラグを使用してインテントを構築できintent.FLAG_ACTIVITY_CLEAR_TOPます。次に、インテントで startActivity() を呼び出し、これをトリガーして onBackPressed などを発生させる必要があります。

Intent i = new Intent(this, C.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i)

この回答を参照してください。これは、C に戻ったときに C が再起動されないようにすることも扱っています: https://stackoverflow.com/a/11347608/1003511

FLAG_ACTIVITY_CLEAR_TOPスタック上のアクティビティ C の最新のインスタンスに戻り、その上にあるものをすべてクリアします。ただし、これによりアクティビティが再作成される可能性があります。アクティビティの同じインスタンスであることを確認したい場合は、FLAG_ACTIVITY_SINGLE_TOP同様に使用してください。ドキュメントから:

上記の例で現在実行中のアクティビティ B のインスタンスは、ここで開始した新しいインテントを onNewIntent() メソッドで受け取るか、それ自体が終了して新しいインテントで再開されます。起動モードが「複数」(デフォルト) であると宣言されていて、同じインテントで FLAG_ACTIVITY_SINGLE_TOP を設定していない場合は、終了して再作成されます。他のすべての起動モードの場合、または FLAG_ACTIVITY_SINGLE_TOP が設定されている場合、このインテントは現在のインスタンスの onNewIntent() に配信されます。

編集:これは、やりたいことに似たコードサンプルです:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        Intent a = new Intent(this, C.class);
        a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(a);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

コードサンプルソース: https://stackoverflow.com/a/9398171/1003511

于 2012-07-06T17:35:55.030 に答える
2

android:excludeFromRecents="true"必要なのは、マニフェスト ファイルのアクティビティ タグに追加する必要があるもの です。マニフェストの Activity タグにこのタグを持つスタックに移動するすべてのアクティビティを停止します。

サンプルコード

 <activity
            android:name="com.xx.xx.ActivityName"
            android:excludeFromRecents="true"


        </activity>

finish()アクティビティスタックに入れたくないアクティビティで(別のアクティビティを開始した後に)メソッドを呼び出すようにしてください。

于 2012-07-06T17:14:55.877 に答える