如何更好地模块化ViewPager订单/选项卡名称

时间:2016-03-24 16:30:28

标签: android android-fragments android-studio android-tablayout

我有ViewPager效果很好,但我想让它好一些。

现在在我的PagerAdapter课程中,在getItem方法中我使用了switch语句:

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            TabFragmentChicken tabChicken = new TabFragmentChicken();
            return tabChicken;
        case 1:
            TabFragmentFish tabFish = new TabFragmentFish();
            return tabFish;
        ...

然后在我的活动类中,我设置了标签名称,如下所示:

tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Chicken"));
tabLayout.addTab(tabLayout.newTab().setText("Fish"));
...

有没有办法可以更好地模块化这个?例如,如果我想更改选项卡的顺序,我必须更改switch语句和选项卡名称。是否有其他类或结构可以用来将它们保存在一个地方所以我只需要更新一件事而不必费心去切换/添加标签文本更改?

1 个答案:

答案 0 :(得分:0)

您可以创建一个包含标题和片段的自定义对象,然后在适配器中使用此对象的列表。这是实现它的一种小方法:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.chahinemouhamad.parrrot.home.recent.RecentFragment;

public class HomePagerAdapter extends FragmentPagerAdapter {
  private final PagerFragment[] pagerFragments;

  public HomePagerAdapter(final FragmentManager fm) {
    super(fm);

    pagerFragments = new PagerFragment[] {
        new PagerFragment("item 1", RecentFragment.newInstance()),
        new PagerFragment("item 2", RecentFragment.newInstance())
    };
  }

  @Override public Fragment getItem(final int position) {
    return pagerFragments[position].fragment;
  }

  @Override public int getCount() {
    return pagerFragments.length;
  }

  @Override public CharSequence getPageTitle(final int position) {
    return pagerFragments[position].title;
  }

  class PagerFragment {
    public final String title;
    public final Fragment fragment;

    public PagerFragment(String title, Fragment fragment) {
      this.title = title;
      this.fragment = fragment;
    }
  }
}