如何附加现有片段

时间:2013-12-05 17:22:45

标签: android fragment

如何在ActionBar.NAVIGATION_MODE_TABS中更改后退标签时附加现有片段?

class MyTabsListener implements ActionBar.TabListener {
    public Fragment fragment;

    public MyTabsListener(Fragment fragment) {
        this.fragment = fragment;
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
            ft.replace(R.id.fragment_container, fragment);
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            ft.detach(fragment);
    }
}

1 个答案:

答案 0 :(得分:0)

您可以验证您的片段是否先前已加载到片段堆栈中。还可以存储所有已使用的片段以重复使用

    public void setFragment(Fragment fragmentInstance) {
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();
        Fragment oldFragmentInstance = fragmentManager
                .findFragmentById(R.id.curr_fragment);

        boolean onlyAttach = false;
        List<Fragment> prevFragments = getSupportFragmentManager()
                .getFragments();
        for (Fragment fragment : prevFragments) {
            if (fragment == null) {
                continue;
            }

            if (fragment.getClass().equals(fragmentInstance.getClass())) {
                onlyAttach = true;
                fragmentInstance = fragment;
                break;
            }
        }

        fragmentTransaction.detach(oldFragmentInstance);

        if (onlyAttach) {
            fragmentTransaction.attach(fragmentInstance);
        } else {
            fragmentTransaction.replace(R.id.curr_fragment,
                    fragmentInstance);
            fragmentTransaction.addToBackStack(null);
        }
        try {
            fragmentTransaction.commit();
        }
}

希望这有帮助