android保留startactivity上的活动流

android保留startactivity上的活动流,android,android-intent,android-activity,Android,Android Intent,Android Activity,在正常情况下,我有以下活动流程: 活动B可以由任何活动启动。当B从任何活动启动时,从B返回时,它将返回到启动活动B的活动,而我希望保持正常的流并返回到A,而不是启动它的活动 舱单有: <activity android:name=".Bactivity" android:label="@string/title_b" android:theme="@style/AppTheme" android:parentActivityName=".Aactivity"

在正常情况下,我有以下活动流程:

活动B可以由任何活动启动。当B从任何活动启动时,从B返回时,它将返回到启动活动B的活动,而我希望保持正常的流并返回到A,而不是启动它的活动

舱单有:

<activity
    android:name=".Bactivity"
    android:label="@string/title_b"
    android:theme="@style/AppTheme"
    android:parentActivityName=".Aactivity" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.mycompany.myfirstapp.Aactivity" />
</activity>
此外,如果从通知开始,我会:

Intent intent = new Intent(this, Aactivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
        PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this).setContentIntent(pendingIntent).......;

即使B由任何活动或通知启动,我如何从活动B返回到活动A?

在尝试启动活动B时,可以使用挂起的意图,以便将其父活动添加到后堆栈中,例如,正如您在代码中所做的那样:

<activity
    android:name=".Bactivity"
    android:label="@string/title_b"
    android:theme="@style/AppTheme"
    android:parentActivityName=".Aactivity" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.mycompany.myfirstapp.Aactivity" />
</activity>
此外,若要在从另一个活动(而非notif)启动时获得向上导航,请使用NavUtils,前提是您已像以前一样在清单中指定父活动:

在Bactivity.java中

这样,您将获得所需的行为。您可以根据自己的需要为流程增加复杂性,只需检查并修改即可

干杯

加上

请记住,如果要向意图中添加额外内容,则还必须添加一个操作,否则它们将不会被以通知中的额外内容启动的活动看到

// Intent for the activity to open when user selects the notification
Intent detailsIntent = new Intent(this,Bactivity.class);
detailsIntent .putExtra(SELECTED_CONTACT_ID, contact_id);
detailsIntent .putExtra(SELECTED_CONTACT_NAME, contact_name);
detailsIntent .setAction(Long.toString(System.currentTimeMillis())); // Set a unique id (dummy) action

使用TaskBuilder代码进行通知时,将启动一个活动,而不是B活动。为什么?upIntent不是必需的,应该是。AddNextIntWithParentStackDetails不是吗?也许你是对的,有时候文档不是很清楚,试试看会发生什么!请让我知道,以便我可以相应地编辑!
// Intent for the activity to open when user selects the notification
Intent detailsIntent = new Intent(this,Bactivity.class);

// Intent for the activity to go to back stack
Intent upIntent = new Intent(this,Aactivity.class);

// Use TaskStackBuilder to build the back stack and get the PendingIntent
PendingIntent pendingIntent =
    TaskStackBuilder.create(this)
                    // add all of DetailsActivity's parents to the stack,
                    // followed by DetailsActivity itself
                    .addNextIntentWithParentStack(upIntent)
                    .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentIntent(pendingIntent);
@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}
// Intent for the activity to open when user selects the notification
Intent detailsIntent = new Intent(this,Bactivity.class);
detailsIntent .putExtra(SELECTED_CONTACT_ID, contact_id);
detailsIntent .putExtra(SELECTED_CONTACT_NAME, contact_name);
detailsIntent .setAction(Long.toString(System.currentTimeMillis())); // Set a unique id (dummy) action