【问题标题】:How stop "onCreateView" in switch fragments如何在开关片段中停止“onCreateView”
【发布时间】:2016-10-08 04:09:37
【问题描述】:

当我从 TabFrag3 转到 TabFrag1 时,TabFrag1 会自动重新加载所有片段。 当我从 TabFrag1 上的 Tabfrag3 切换时,我需要停止“onCreateView”。 如果该功能已经加载过,如何停止该功能? 我希望它刚刚开始。

编辑:

主活动:

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

【问题讨论】:

  • 描述你想要做什么并展示一些代码。没有足够的信息可以提供帮助。如果您使用的是具有多个片段的 viewpager,那么可以尝试 setOffscreenPageLimit()
  • 您是否希望页面在导航到选项卡时不刷新
  • 尝试查看代码。 “您是否希望页面在导航到选项卡时不刷新”=> 是的,我不希望刷新此片段。
  • 尝试在您的SectionsPagerAdapter 中添加@Override public int getCount() { return PAGE_COUNT; }
  • 我已经有了:“@Override public int getCount() { return 3; } => 此代码是从 Android Studio 自动生成的。

标签: android android-fragments oncreate


【解决方案1】:

您应该使用添加instead of 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);

那么您应该检查fragmentToAddOrShow 是否为not null,如果是则隐藏currentVisibleFragment 并显示fragmentToAddOrShow 否则隐藏currentVisibleFragment 并添加fragmentToAddOrShow

【讨论】:

  • 对不起,我不明白你的解决方案。我尝试了,但每次我在 fragment1 中返回时,我的 fragment1 都有 visibility=visible 并且对于这个 myfunction oncreateview 一直重启。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    相关资源
    最近更新 更多