【问题标题】:ViewPager with 3 fragments load fragments on either side from the middle fragment带有 3 个片段的 ViewPager 从中间片段的两侧加载片段
【发布时间】:2015-12-17 17:20:48
【问题描述】:

我有 3 个片段 A、B 和 C。它们设置为选项卡选项卡 A、选项卡 B、选项卡 C 和适配器,如下面的代码所示。我已经设置了我的寻呼机适配器,以便中间选项卡,选项卡 B 加载第一个

adapter = new PagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
if (viewPager != null) {
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(1);
}

这一切都很好,但是当我第一次从选项卡 B 导航到选项卡 C 时,它可以完美运行。但是,当我第一次从 Tab B 导航到 Tab A 时,它显示片段 B 而不是 A,当我第二次导航(Tab B 到 Tab A )时,它现在按预期工作。我将如何处理这种初始滞后和选项卡不匹配的问题。

public class PagerAdapter extends FragmentStatePagerAdapter {

    int mNumOfTabs;

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

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                FragmentA A = new FragmentA();
                return A;


            case 1:
                FragmentB B = new FragmentB();
                return B;

           case 2:
                FragmentC C = new FragmentC();
                return C;
            default:
                return null;
        }
    }

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

【问题讨论】:

  • 你想每次在它们之间滑动时都返回一个新的 Fragment 吗?我认为保留页面之间的 Fragment 实例更有意义,这样就不会丢失任何数据。
  • 片段的内容在滑动时会改变,所以我需要新的实例..不能缓存它们
  • 如果您有 3 个选项卡,只需将 3 个传递给您的适配器。为什么使用 tabLayout.getTabCount()?您的标签计数是动态的吗?
  • 没有标签计数是静态的 3 个

标签: android android-fragments android-tabs


【解决方案1】:

要片段不转载可以拨打setRetainInstance(true)

如果您需要找到标签的片段,则可以通过 FragmentTransaction 类使用您的标签创建它。

以ViewPager为例,FragmentPagerAdapter片段指定其标签可见于其source

有一个方法make Fragment Name (int viewId, long id) 分配片段标签类型:

private static String makeFragmentName(int viewId, long id) {
        return "android:switcher:" + viewId + ":" + id;
    }

其中 viewId - id ViewPager,id - 片段的位置。

或使用setOffscreenPageLimit

mViewPager.setOffscreenPageLimit(mViewPager.getCount());

【讨论】:

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