【问题标题】:Android - ViewPager third tab has not shownAndroid - ViewPager 第三个选项卡未显示
【发布时间】:2017-09-15 10:47:30
【问题描述】:

我有一个包含 3 个标签片段的 viewPager。 第一个和第二个片段工作正常,但是当我扫到第三个标签时 我没有看到他。 第三个选项卡仅在带有 viewPager 的活动重新加载(移动到另一个活动并返回)时显示。

我的代码:

    private void setupViewPager(ViewPager viewPager) {
    adapter = new PagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new Fragment1(), Constants.TAB_0);
    adapter.addFragment(new Fragment2(), Constants.TAB_1);
    adapter.addFragment(new Fragment3(), Constants.TAB_2);

    viewPager.setAdapter(adapter);

    viewPager.setOffscreenPageLimit(3);
}

寻呼机适配器:

public class PagerAdapter extends FragmentPagerAdapter {
/*
 * Arraylist used to contain the fragments
 * and contain fragments title's
 */
private final List<Fragment> fragmentList = new ArrayList<>();
private final List<String> fragmentTitleList = new ArrayList<>();

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

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

@Override
public int getCount() {
    return fragmentList.size();
}

//Adds the fragment and it's title. Called in MainActivity
public void addFragment(Fragment fragment, String title) {
    fragmentList.add(fragment);
    fragmentTitleList.add(title);
}

//Retrieves the title of the tab
@Override
public CharSequence getPageTitle(int position) {
    return fragmentTitleList.get(position);
}

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}

}

【问题讨论】:

  • viewPager.setOffscreenPageLimit(2);
  • 还是不行

标签: android android-layout tabs android-viewpager


【解决方案1】:

这是我的适配器,在 getItem 上我将片段对象设置为片段活动。

public class SectionPagerAdapter extends FragmentPagerAdapter {

    Fragment fragment;

    public SectionPagerAdapter(FragmentManager fm) {
        super(fm);
    }


    @Override
    public Fragment getItem(int position) {

        if (position == 0){
            fragment = new FragmentOne();
        }

        else if (position == 1){
            fragment = new FragmentTwo();
        }

        else if (position == 2){
            fragment = new FragmentThree();
        }

        return fragment;
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "name one";
            case 1:
                return "name two";
            case 2:
                return "name three";
        }
        return null;

    }

}

然后在我的主要活动中,我这样称呼它:

ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
SectionPagerAdapter sectionPagerAdapter = new SectionPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(sectionPagerAdapter);


TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);

尝试用上面的代码替换您的代码,如果有帮助,请告诉我!

【讨论】:

    【解决方案2】:

    使用 new PagerAdapter(getChildSupportFragmentManager());代替 getSupportFragmentManager()

    试试这个!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      相关资源
      最近更新 更多