【问题标题】:How to better modularize the ViewPager order/tab names如何更好地模块化 ViewPager 顺序/选项卡名称
【发布时间】:2023-03-14 20:40:01
【问题描述】:

我有一个运行良好的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 语句和选项卡名称。是否有另一个类或结构可以用来将它们全部保存在一个地方,这样我只需要更新一个东西,而不必为切换/添加选项卡文本更改而烦恼?

【问题讨论】:

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


    【解决方案1】:

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

    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;
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多