Android:确保特定活动保留在Backstack中

时间:2016-11-29 12:45:13

标签: android android-intent android-activity

我想通过backstack中的只有一个主要活动启动每个活动,所以我总是可以返回带有后退按钮的主要活动(例如,用于启动我使用的活动< EM> startActivity()的):

  1. 主要活动 - 活动1(按下后退)返回到Main 活动
  2. 主要活动 - 活动1 - 活动2(后退)也 返回到主要活动
  3. 看起来我需要在启动每个新活动时使用 FLAG_ACTIVITY_CLEAR_TASK 标志,但它也会清除主要活动。我已经尝试 FLAG_ACTIVITY_CLEAR_TOP 第一情况下工作正常,但在第二中没有。

    如果有人遇到同样的问题,请提供帮助。任何想法赞赏!谢谢!

    我的主要活动:

            <activity
            android:name=".activity.main.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden"
            android:launchMode="singleTop">
    
            <meta-data
                android:name="android.app.default_searchable"
                android:value=".activity.search.SearchActivity" />
    
        </activity>
    

4 个答案:

答案 0 :(得分:0)

在onBackPressed()中触发Main Activity的意图时设置 FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY 标志。

答案 1 :(得分:0)

确保在finish()启动Activity1时致电Activity2。这将确保您的任务堆栈如下所示:MainActivity-&gt; Activity2。

答案 2 :(得分:0)

正如@EmmanuelMtali所提到的,我出于这个原因使用了父活动。

  1. 对于与Main不同的活动,我将元数据(和 android:parentActivityName API&gt; 16 )设置为如下:

        <activity
        android:name=".activity.user.LoginActivity"
        android:screenOrientation="portrait"
        android:configChanges="orientation|keyboardHidden"
        android:launchMode="singleTop"
        android:parentActivityName=".activity.main.MainActivity">
    
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".activity.main.MainActivity" />
    </activity>
    
  2. 当我需要开始新活动时,我使用意图数组和 startActivities()方法:

    public static Intent[] createIntentsWithMainActivityInStack(Context context, Intent topMostIntent) {
    TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(context);
    topMostIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    
    Intent[] intents =
            taskStackBuilder
                    .addNextIntentWithParentStack(topMostIntent)
                    .getIntents();
    
    return intents; }
    
  3. Intent[] intents = createIntentsWithMainActivityInStack(context, new Intent(context, LoginActivity.class));
    startActivities(intents);
    

答案 3 :(得分:-1)

在每项活动中尝试此操作,以便在您返回时按主要活动打开:

@Override
    public void onBackPressed()
    {
        super.onBackPressed();
        Intent intent = new Intent(ACTIVITYTHREE.this,MAINACTIVITY.class);
        startActivity(intent);
    }