【问题标题】:Android TaskStackBuilder.startActivities() doesn't work as expectedAndroid TaskStackBuilder.startActivities() 无法按预期工作
【发布时间】:2015-01-07 03:24:25
【问题描述】:

Android - Build a notification, TaskStackBuilder.addParentStack not working 可能重复

虽然有很多关于这个话题的问题得到了解答,但没有一个能解决我的问题。实际上,我正在和他们所有人一起玩,但无法让他们投入工作:(

我有一个启动画面,我正在检查一个标志(我从后端获取它)并将用户导航到 SecondActivity,例如,如果标志为真,而不是 FirstActivity。

我的清单是这样的:

<activity
            android:name="com.package.name.SplashActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.package.name.Firstctivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name="com.package.name.SecondActivity"
            android:label="@string/title_tracking"
            android:screenOrientation="portrait"
            android:parentActivityName="com.package.name.Firstctivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.package.name.Firstctivity" />
        </activity>

我在 SplashScreen Activity 的 onResume() 方法中调用了以下方法:

private void checkFlag()
    {
        ...

        if (flag == null)
        {
            return;
        }

        // show tracking screen
        final Intent intent = new Intent(SplashActivity.this, SecondActivity.class);
        intent.putExtra(SecondActivity.EXTRA_ID, "1234");
        intent.putExtra(SecondActivity.EXTRA_ACTION, SecondActivity.ACTION_VISITING);
        intent.putExtra(SecondActivity.EXTRA_LIVE_STATUS, true);

        TaskStackBuilder sBuilder = TaskStackBuilder.create(SplashActivity.this);
        sBuilder.addNextIntent(new Intent(SplashActivity.this, FirstActivity.class));
        sBuilder.addNextIntent(intent);
        sBuilder.startActivities();

        SplashActivity.this.finish();
    }

现在,当用户启动应用程序并且标志不为空时,他将被定向到 SecondActivity。但是,通过单击后退按钮应用程序关闭,但我希望看到 FirstActivity。 在 SecondActivity 中,通过单击 up carret 用户导航到 FirstActivity,如果用户单击后退按钮,我希望看到相同的行为。

任何建议将不胜感激。谢谢。

【问题讨论】:

    标签: android back-stack activity-stack taskstackbuilder


    【解决方案1】:

    虽然向上导航工作正常(基于我上面的代码),但返回按钮的方式不同。我不确定 TaskStackBuilder 中是否存在错误,或者这是我的问题,但这是我用来解决问题的方法。我发现的原因是因为后退按钮按时间顺序浏览历史记录。由于在此之前没有任何活动,因此应用程序将关闭。

    我在我的 intent intent.putExtra(SecondActivity. EXTRA_BACK_MAIN_ACTIVITY, true); 中添加了另一个标志,并将以下代码添加到我的 SecondActivity 中:

    @Override
    public void onBackPressed()
    {
        final Bundle extras = this.getIntent().getExtras();
        if ((extras != null) && extras.containsKey(SecondActivity.EXTRA_BACK_MAIN_ACTIVITY))
        {
            setupNavUtils();
        }
    }
    
    private void setupNavUtils()
    {
        final Intent intent = new Intent(this, FirstActivity.class);
    
        if (NavUtils.shouldUpRecreateTask(this, intent))
        {
            TaskStackBuilder.create(this).addNextIntent(intent).startActivities();
            super.finish();
        }
        else
        {
            NavUtilsLegacy.navigateUpTo(this, intent);
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      将FirstActivity的launchMode设置为singleTop

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多