2

Androidの重複の可能性- 通知の作成、TaskStackBuilder.addParentStack が機能しない

このトピックについて多くの質問が回答されていますが、どれも私の問題を解決していません。私は実際、それらすべてで遊んでいますが、それらを機能させることができませんでした:(

スプラッシュ スクリーンがあり、フラグをチェックして (バックエンドから取得します)、ユーザーを SecondActivity に移動します。たとえば、フラグが true の場合は 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 アクティビティの 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();
    }

これで、ユーザーがアプリを起動し、フラグが null でない場合、SecondActivity にリダイレクトされます。ただし、戻るボタンをクリックするとアプリケーションが閉じますが、代わりに FirstActivity が表示されると思います。SecondActivity では、ユーザーが戻るボタンをクリックすると同じ動作が見られると予想される FirstActivity に移動します。

任意の提案をいただければ幸いです。ありがとう。

4

2 に答える 2

0

上へのナビゲーションは (上記のコードに基づいて) 正常に機能していましたが、[戻る] ボタンは同じようには機能しませんでした。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);
    }

}
于 2015-01-08T02:24:42.830 に答える