2012-11-17 31 views
6

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

+1

AFAIK,这是行不通的。您可以使用'GestureDetector'来监视您现有片段上的滑动。 – CommonsWare

+0

顺便说一句,澄清,我假设你的意思是你想要使用单个片段*实例* - 如果你的意思是你只想使用一个片段* class *,那就很好。 – CommonsWare

回答

4

您可以为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); 
    } 
} 

这样,你可以重用大部分代码只改变你的开关/ case语句所需要的。

+0

但你不能创建一个片段类的非空构造函数 –

3

您误解了classobject of class的概念。你MyFragment.java源代码定义class你变成“活物”每次new运营商(new MyFragment();)实例它的时候 - 这将创建object这是您的classinstance。除非你故意避免这种情况(即使用单身模式),你可以根据自己的喜好制作class的许多instances,同样的方法可以制作许多使用单一食谱的蛋糕。这也适用于碎片。

所以只要你创建单独object(又名说instance)您class每个页面,你应该能够做你想做的。

+0

你能否提供一些上述解释的示例..? – Harsha