2017-03-20 99 views
0

我有一個基本PagerAdapter:一個PagerAdapter爲多個片段

public class PagerAdapter extends FragmentStatePagerAdapter { 
int mNumOfTabs; 

private final List<Fragment> mFragmentList = new ArrayList<>(); 
private final List<String> mFragmentTitleList = new ArrayList<>(); 

public PagerAdapter(FragmentManager fm, int NumOfTabs) { 
    super(fm); 
    this.mNumOfTabs = NumOfTabs; 
} 

public void addFragment(Fragment fragment, String title) { 
    mFragmentList.add(fragment); 
    mFragmentTitleList.add(title); 
} 

public PagerAdapter(FragmentManager manager) { 
    super(manager); 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return mFragmentTitleList.get(position); 
} 


@Override 
public Fragment getItem(int position) { 

    switch (position) { 
     case 0: 
      Main tab1 = new Main(); 
      return tab1; 
     case 1: 
      Secondary tab2 = new Secondary(); 
      return tab2; 
     case 2: 
      Third tab3 = new Third(); 
      return tab3; 
     default: 
      return null; 
    } 
} 

@Override 
public int getCount() { 
    return 3; 
} 
} 

它完全適用於一個tablayout並且被顯示在viewpager 3個片段。我在幾個片段中有多個相同的片段設計(相同的標籤)。是否有可能使用這個帶有多個選項(片段)的PagerAdapter,所以它必須改變的是實例化的類。 Main tab1 = new Main();SomeOtherClass tab1 = new SomeOtherClass();。我試着用參數和變量來做這件事,但沒有成功。

+0

你的問題不清楚。 –

+0

@AbhishekBansal我有多個基本相同的片段,只是名稱不同,我想要做的就是使用一個pageradapter來控制viewpager中的片段。正在顯示的片段取決於先前選擇的選項(按鈕)。他們可以改變。例如,下一次顯示的片段是A,B和C,當選擇另一個選項時,顯示的片段是D,E和F.並且這全部通過使用一個尋呼機適配器來控制 – squash

回答

0

public Fragment getItem(int position);方法中,您應該返回給定位置的mFragmentList中的片段。事情是這樣的:

@Override 
public Fragment getItem(int position) { 
    return mFragmentList.get(position); 
} 

通過這種方式,您可以使用該適配器的任何片段。

而且,該方法getCount將()應如下:

@Override 
public int getCount() { 
    return mFragmentList!=null ? mFragmentList.size() : 0; 
} 

爲了避免硬編碼值。

+0

讓它工作。有一段時間沒有在這個項目上工作,我是Android開發的新角色,所以我忘記了這是關於 – squash

+0

我很高興它幫助你。祝你好運! –