2
@Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        if(tab.getPosition()==0)
        {
            FragmentA frag = new FragmentA();
            ft.replace(android.R.id.content, frag);

        }
        else
        {
            FragmentB frag = new FragmentB();
            ft.replace(android.R.id.content, frag);
        }
    }

上記のコードはフラグメントでロードされますが、問題は各フラグメントの新しいインスタンスを作成することです。そのため、タブに出入りすると、フラグメントがリロードされます。各フラグメントの新しいインスタンスを作成せず、元のインスタンスのみを使用するようにするための最良の方法は何ですか?

ありがとう

4

2 に答える 2

0

フラグメントをバックスタックにプッシュするメソッドを追加するか、アイテムをポップして、バックスタックに既にあるフラグメントを再利用できるようにする必要があります。次の関数の「名前」パラメーターは、検索してポップバックするための最良の方法を提供します (必要な場合)。

private void popToOrPushFragmentWithName(Fragment fragment, String name, FragmentTransaction ft) {
    FragmentManager manager = getSupportFragmentManager();

    // Scan the back stack for an entry with the given fragment name
    int count = manager.getBackStackEntryCount();
    FragmentManager.BackStackEntry entry = null;
    while (--count >= 0) {
        FragmentManager.BackStackEntry check = manager.getBackStackEntryAt(count);

        if (check.getName() != null && check.getName().equals(name)) {
            entry = check;
            break;
        }
    }

    if (entry == null) {
        // There is no entry, so push the fragment
        ft.replace(R.id.fragment_container, fragment);
        ft.addToBackStack(name);
        // might not need this next line (since you are using tabselected override)
        ft.commit();
    } else {
        // Pop back to the existing fragment (0 = not inclusive, so our fragment by index is on top)
        manager.popBackStackImmediate(entry.getId(), 0);
    }
}

onTabselected は次のようになります。

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    if(tab.getPosition()==0)
    {
        FragmentA frag = new FragmentA();
        popToOrPushFragmentWithName(frag, "FragmentA", ft);

    }
    else
    {
        FragmentB frag = new FragmentB();
        popToOrPushFragmentWithName(frag, "FragmentB", ft);
    }

}

これが役立つことを願っています。:)

于 2012-08-03T14:30:53.333 に答える
0

クラスで属性を使用する

private frag = new Fragment();
...

    if(tab.getPosition()==0)
    {
        ft.replace(android.R.id.content, frag);

    }
于 2012-08-03T14:23:02.160 に答える