2

Android ガイドラインに準拠するバック スタックを構築するアクティビティ (C) を起動する通知があります。バック スタック:

C
B
A

ユーザーが通知をクリックすると、C が開き、押し戻すと B、A、ホーム画面の順に移動します。これは期待どおりに機能します。

ユーザーが通知をクリックし(Cを開く)、ホームボタンを押してホーム画面に移動し、ホーム画面からアプリを起動すると、期待どおりにCではなくAが開きます。その後、(A から) 押し戻すと、C、B、A の順に進みます。したがって、この状況でホーム画面からアプリを起動すると、新しいアクティビティ A が作成され、既存のスタックの上に配置されます。既存のスタック (C) の上部を開く代わりに、スタックは次のようになります。

A
C
B
A

通知のバック スタックと起動インテントを作成するコード:

/* Build the back stack for navigation */
TaskStackBuilder stackBuilder = TaskStackBuilder.create( this );
/* Pairing List */
Intent intent = new Intent( this, A.class );
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP );
stackBuilder.addNextIntent( intent );
/* Pairing */
intent = new Intent( this, B.class );
intent.putExtra( "id", briefing.getLeg().getDay().getPairing().getId() );
stackBuilder.addNextIntent( intent );

/* Create a launch intent and notification */
intent = new Intent( this, C.class );
intent.putExtra( "date", briefing.getLeg().getDay().getDate() );
intent.putExtra( "id", briefing.getLeg().getId() );
intent.putExtra( "briefing", true );

stackBuilder.addNextIntent( intent );
pIntent = stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_ONE_SHOT );

私のマニフェストでのアクティビティ宣言:

<activity android:name=".C" />
<activity
    android:name=".A"
>
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity android:name=".B" />

インテントに設定しているフラグに問題があると思いますが、何を変更する必要があるのか​​ わかりません。何か案は?

4

1 に答える 1

0

これは正常な動作だと思います。一番上のアクティビティのみをアクティブにできます。したがって、A を開始すると、上にプッシュされます。

新しいタスク(独自のバックスタックを使用)を開始する場合は、マニフェストでlaunchmodeを「singleInstance」に設定する必要があると思います。これにより、アクティビティ A を開始するたびに新しい「タスク」が作成されます。インテントを使用すると、バック スタック A->B->C を構築できるはずです。

見てみましょう: http://developer.android.com/guide/components/tasks-and-back-stack.html

于 2013-06-20T08:41:08.013 に答える