在ViewPager中多次使用一个Fragment

7

是否可以在ViewPager中多次使用一个片段?我正在尝试使用ViewPager构建动态更新的UI。 我想为每个页面使用相同的设计,基本上是相同的片段,但使用不同的数据,就像listview适配器一样。


1
据我所知,这样做行不通。您可以使用GestureDetector来监视现有片段上的滑动手势。 - CommonsWare
1
顺便提一下,为了澄清,我假设你的意思是想使用单个片段实例 -- 如果你的意思是想只使用单个片段,那也完全可以。 - CommonsWare
2个回答

5
你可以实例化相同的Fragment类用于ViewPager中的每个页面,传递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语句中只更改所需内容,以便重用大部分代码。

但您不能创建片段类的非空构造函数。 - Dinesh Neupane

3
你误解了“类”与“类的实例对象”的概念。你的MyFragment.java源代码定义了一个“类”,每次你使用“new”运算符(即“new MyFragment();”)创建一个“对象”,即该“类”的一个“实例”时,“类”就好比变成了一个“活生生的东西”。除非你有意阻止这种情况发生(例如使用单例模式),否则你可以像用单一食谱制作许多蛋糕一样,随意创建任意数量的该“类”的“实例”。同样适用于片段。
因此,只要为每个页面创建一个“独立”的“对象”(也称为“实例”),你就应该能够做到想要的事情。

你能提供一些上述解释的示例吗? - Harsha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接