在 ViewPager 中多次使用一个 Fragment

Posted

技术标签:

【中文标题】在 ViewPager 中多次使用一个 Fragment【英文标题】:Use one Fragment in a ViewPager multiple times 【发布时间】:2012-11-06 01:58:54 【问题描述】:

是否可以在视图页面中多次使用一个片段?我正在尝试使用 ViewPager 构建动态更新的 UI。 我想使用相同的设计,基本上是相同的片段,每个页面都有不同的数据,比如列表视图适配器。

【问题讨论】:

AFAIK,这行不通。您可以使用GestureDetector 来监视现有片段上的滑动。 顺便说一句,澄清一下,我假设您的意思是要使用单个片段 instance -- 如果您的意思是只想使用单个片段 class,很好。 【参考方案1】:

您可以为 ViewPager 中的每个页面实例化相同的 Fragment 类,传递 ViewPager 的位置来控制要显示的内容。类似的东西:

public class MyFragment extends Fragment 

    private int mIndex;

    public MyFragment(int index) 
        mIndex = index;
    

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) 

        switch(mIndex)
            case 0:
            // do you things..
            case 1:
            // etcetera
                     
    

那么,在你的 FragmentPagerAdapter 中:

public static class MyAdapter extends FragmentPagerAdapter 
    public MyAdapter(FragmentManager fm) 
        super(fm);
    

    @Override
    public int getCount() 
        return NUM_ITEMS;
    

    @Override
    public Fragment getItem(int position) 
        return new MyFragment(position);
    

这样您就可以重用大部分代码,只更改您在 switch/case 语句中需要的内容。

【讨论】:

但是不能创建片段类的非空构造函数【参考方案2】:

您误解了 classobject of class 的概念。您的 MyFragment.java 源代码定义了 class ,每次您使用 new 运算符 (new MyFragment();) 实例化它时,您都会将它变成“活的东西” - 这会创建 object 这是一个 @您的class 的987654328@。除非您有意阻止这种情况(即使用单例模式),否则您可以根据需要制作任意数量的 instancesclass,同样您可以使用单一配方制作尽可能多的蛋糕。这也适用于片段。

因此,只要您为每个页面创建class单独 object(又名instance),您应该能够做您想做的事情。

【讨论】:

你能为上述解释提供一些示例吗..?

以上是关于在 ViewPager 中多次使用一个 Fragment的主要内容,如果未能解决你的问题,请参考以下文章

使用 FragmentActivity 中的 viewPager 更改方向

Android 仅使用支持库中的 ViewPager

关于Fragment的懒加载问题

解决ViewPager多次刷新后重叠问题

ViewPager Fragment OncreateView根据切换的标签数多次调用

如何多次使用同一个片段?