0

1 つのアクティビティと複数のフラグメントを持つ Android アプリケーションを開発しています。私のアプリにはナビゲーション ドロワーが含まれています。レイアウトにはリストビューが含まれています。アイテムをクリックしてフラグメントを動的に変更しft.replace(R.id.my_placehodler, new MyFragment())、トランザクションを追加しbackstack ft.addToBackstack(null)ます。新しいフラグメントをインスタンス化するたびに新しいトランザクションを作成するとき。それは良いアプローチではないように私には思えます。フラグメント トランザクションを行う正しい方法について提案をいただけますか?

4

2 に答える 2

0

setFragment(FragmentClassObject,false,"fragment");メソッドを呼び出すだけです。

public void setFragment(Fragment fragment, boolean backStack, String tag) {
    manager = getSupportFragmentManager();
    fragmentTransaction = manager.beginTransaction();
    if (backStack) {
        fragmentTransaction.addToBackStack(tag);
    }
    fragmentTransaction.replace(R.id.content_frame, fragment, tag);
    fragmentTransaction.commit();
}
于 2014-12-03T13:43:09.983 に答える
0

Fragment の同じクラスに対して複数のインスタンスをインスタンス化することを避けたい場合、つまり、Fragment のクラスごとに単一のインスタンスを持ちたい場合は、タグを使用して各 Fragment を認識できます。

@Override
public void onNavigationDrawerItemSelected(int position) {
    String tag = "";
    switch (position) {
    case 0:
        tag = "fragment_0";
        break;
    case 1:
        tag = "fragment_1";
        break;
    case 2:
        tag = "fragment_2";
        break;
    }

    FragmentManager fragmentManager = getFragmentManager();
    Fragment fragment = fragmentManager.findFragmentByTag(tag);
    if (fragment == null) {
        // Only in case there is no already instaciated one,
        // a new instance will be instanciated.
        switch (position) {
        case 0:
            fragment = new Fragment_class_0();
            break;
        case 1:
            fragment = new Fragment_class_1();
            break;
        case 2:
            fragment = new Fragment_class_2();
            break;
        }
    }

    fragmentManager.beginTransaction().replace(R.id.container, fragment, tag).commit();
}
于 2014-12-03T13:54:25.723 に答える