如何停止" onCreateView"在交换机片段中

时间:2016-10-08 04:09:38

标签: android android-fragments oncreate

当我从TabFrag1上的TabFrag3开始时,TabFrag1会自动重新加载所有片段。 当我从TabFrag1上的Tabfrag3切换时,我需要停止" onCreateView" 如果已经加载了该功能,我怎么能停止它? 我希望它刚刚起步。

编辑:

MainActivity:

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                TabFragment1 tab1 = new TabFragment1();
                return tab1;
            case 1:
                TabFragment2 tab2 = new TabFragment2();
                return tab2;
            case 2:
                TabFragment3 tab3 = new TabFragment3();
                return tab3;
            default:
                return null;
        }
    }
}

TabFragment1

public class TabFragment1 extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View inflatedView = inflater.inflate(R.layout.tab_fragment_1, container, false);
        final ListView list= (ListView) inflatedView.findViewById(R.id.list);
        new function();//this function load json data
        return inflatedView;
}

这个onCreateView反复收费数据......

编辑2: 我在这里找到了解决方案:https://stackoverflow.com/a/36518677/6910082

2 个答案:

答案 0 :(得分:0)

您应该使用instead添加replace。在添加新的Fragment之前,您应该检查它是否已经在FragmentManager中退出,如果有,则隐藏当前可见的Fragment&显示另一个,如果它不存在,那么add它并隐藏当前可见的Fragment

例如:

@Nullable @Override public Fragment getFragmentByTag(@NonNull FragmentManager fragmentManager, @NonNull String tag) {
    return fragmentManager.findFragmentByTag(tag);//returns fragment by its TAG.
}

@Nullable @Override public Fragment getVisibleFragment(@NonNull FragmentManager manager) {
    List<Fragment> fragments = manager.getFragments();
    if (fragments != null && !fragments.isEmpty()) {
        for (Fragment fragment : fragments) {
            if (fragment != null && fragment.isVisible()) {
                Logger.e(fragment.getClass().getSimpleName(), fragment.isVisible());
                return fragment;//return current visible fragment to hide
            }
        }
    }
    return null;
}
那么你应该做点什么:

Fragment currentVisibleFragment = getVisibleFragment(fragmentManager);
Fragment fragmentToAddOrShow = getFragmentByTag(fragmentManager, FormsListView.TAG);

然后你应该检查fragmentToAddOrShownot null是否隐藏currentVisibleFragment并显示fragmentToAddOrShow其他隐藏currentVisibleFragment并添加fragmentToAddOrShow

答案 1 :(得分:0)

使用hide()而不是每次都去add(),只在第一次添加()