1

現在、Android アプリの構造は

Home
   About us
   Products
     product1
     product2
     product3
   Contact us

サイドメニューがあり、製品 1 に直接アクセスできるため、現在の試みはトランザクションごとにバックスタックに追加することであり、非常に奇妙な動作をしています。

私がこのように入ると:

Home->product1->About us

フローは、ホームページに入った後、サイドメニューのproduct1をクリックし、product1ページに入った後、サイドメニューのabout usをクリックします

最初に戻るボタンを押すと、product1 に戻りますが、ホームに戻るはずです

戻るボタンを 2 回押すと、ホームに戻りますが、製品ページに移動する必要があります。

このような状況でバックスタックを処理するにはどうすればよいですか? 助けてくれてありがとう。

4

2 に答える 2

2

popBackStackスタックを制御するために、フラグメントを変更するときと適切なタイミングで賢くする必要があります。これは私のアプリケーションの 1 つの例です (スタック内の既存のフラグメントの再利用も処理します)。

// Idea from http://stackoverflow.com/questions/18305945/how-to-resume-fragment-from-backstack-if-exists
private void setPrimaryContentFragment(BaseFragment fragment, boolean allowStack){
    final String backStackName = fragment.getBackStackName();

    final FragmentManager manager = getSupportFragmentManager();
    final boolean fragmentPopped = manager.popBackStackImmediate(backStackName, 0);

    if (!fragmentPopped) { //fragment not in back stack, create it.
        if (!allowStack && manager.getBackStackEntryCount() > 1) {
            manager.popBackStack(manager.getBackStackEntryAt(0).getId(), 0);
        }

        final FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.primary_content, fragment);
        transaction.addToBackStack(backStackName);
        transaction.commit();

        try {
            manager.executePendingTransactions();
        } catch (IllegalStateException exception) {
            // Move along as this will be resolved async
        }
    }
}

メソッドは私のgetBackStack()基本フラグメントに実装されており、デフォルトの実装は次のとおりです。

public String getBackStackName() {
    return getClass().getName();
}

フラグは、allowStackバックスタックに複数のエントリが存在できるかどうかを制御するために使用されます。

ユーザーが詳細ページに直接移動したときに製品フラグメントを挿入する限り、おそらくそれを行う必要があります。例: 製品の置換を実行してから、製品の詳細の置換を実行します。このコード スニペットとリンクされた投稿が、必要なソリューションを考え出すのに役立つことを願っています。

于 2016-01-07T23:57:39.663 に答える
0

ハードバック ボタンは、ユーザーから期待される動作であるスタックを常にトラバースします。

製品 X が親製品画面に戻るなど、親アクティビティに戻る何かを探している場合、それは [上へ] ボタン機能を使用して定義できます。Android Dev Site からの Up Navigation

この方法では、バック スタックをクリアして管理する必要はなく、ユーザーを親画面に戻す項目を定義するだけです。

于 2016-01-07T23:59:55.883 に答える