0

下の画像を見てください

ここに画像の説明を入力

左側のパネルには、チケットと監査という名前の 2 つのカテゴリがあり、それぞれに戻るボタンがあります。チケットは 2ListView'sです。1st の項目をクリックするListviewと、2nd が開きListviewます。同時に、戻るをクリックすると、再び 1st が表示されListviewます。再び戻って、アプリケーションを終了します。

このシナリオは、監査でも同じです。

このシナリオでは、 4 を使用しFragment'sました。

xml ファイル

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout 
    android:id="@+id/framelayout_fragment1_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="0.7">



</FrameLayout>

<fragment
    android:id="@+id/detailFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.mobinius.fragments.DetailFragment" 
    android:layout_weight="0.3"
    />      

チケットから監査へ、またはその逆に切り替えると、フリップ アニメーションが表示されます。

private void flipFragments(String tag) {

    System.out.println(" tag in flipFragments : "+tag);
    Fragment fragment = getFragmentManager().findFragmentByTag(tag);

    System.out.println(" fragment in flipFragments : "+fragment);       

    if (fragment != null) 
    {
        getFragmentManager().popBackStack(tag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        return;
    }       

    getFragmentManager()
            .beginTransaction()

    .setCustomAnimations(
            R.animator.card_flip_right_in, R.animator.card_flip_right_out,
            R.animator.card_flip_left_in, R.animator.card_flip_left_out)

    .replace(R.id.framelayout_fragment1_container, new AuditGroupFragment(), tag)

    .addToBackStack(tag)

    .commit();        
}

バックボタンを押すと、バックスタックからフラグメントを置き換えます

public void onBack(String tag) {        

    FragmentManager fragmentManager = getFragmentManager();
    Fragment fragment = fragmentManager.findFragmentByTag(tag);
    if(fragment != null)
        fragmentManager.popBackStack(tag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    else
        finish();
}

リスト項目のいずれかをクリックすると、現在のフラグメントが必要なものに置き換えられます

public void onListItemClick(String tag, Fragment fragmentToAdd) {       

    getFragmentManager()
    .beginTransaction()

    .replace(R.id.framelayout_fragment1_container, fragmentToAdd, tag)

    .addToBackStack(tag)

    .commit();
}

チケット ナビゲーションでは、両方のフラグメントが完全に機能します。

問題 :

デフォルトでは、チケットフラグメントがアクティビティに追加されます。ここで、Audit に切り替えて 1 つのリスト項目を選択してから Ticket に切り替えると、読み込みに時間がかかり、再び Audit に切り替えると、2 番目の ListView が表示されません (バックスタックに保存されているはずです)。最初から読み込みます (最初の ListView を表示)。

では、まずこのアプローチは正しいのでしょうか。そうでない場合は、正しいアプローチを提案してください。

4

1 に答える 1

0

最後に私の問題の解決策を得ました。ここには、同じサンプルの良い例があります。また、ここで議論されています。

于 2013-08-06T07:29:42.097 に答える