2012-11-17 29 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