在 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】:您误解了 class
与 object of class
的概念。您的 MyFragment.java
源代码定义了 class
,每次您使用 new
运算符 (new MyFragment();
) 实例化它时,您都会将它变成“活的东西” - 这会创建 object
这是一个 @您的class
的987654328@。除非您有意阻止这种情况(即使用单例模式),否则您可以根据需要制作任意数量的 instances
或 class
,同样您可以使用单一配方制作尽可能多的蛋糕。这也适用于片段。
因此,只要您为每个页面创建class
的单独 object
(又名instance
),您应该能够做您想做的事情。
【讨论】:
你能为上述解释提供一些示例吗..?以上是关于在 ViewPager 中多次使用一个 Fragment的主要内容,如果未能解决你的问题,请参考以下文章
使用 FragmentActivity 中的 viewPager 更改方向