【问题标题】:ViewPager showing preloaded fragment instead of current fragmentViewPager 显示预加载的片段而不是当前片段
【发布时间】:2015-06-26 11:32:09
【问题描述】:

我正在使用 Tablayout(android.support.design.widget.TabLayout) 和 ViePager 将 4 个片段实例化到 FragmentStatePagerAdapter。

当我滚动浏览所有片段时,所有片段都完美加载。但是当我选择一个选项卡时,随机预加载片段(我知道视图寻呼机沿当前片段实例化相邻片段)而不是当前片段。

[在我的情况下,当我单击第 4 个位置的第 3 个选项卡片段时,相同的片段也显示在第 4 个位置]。

我该如何纠正这种情况。 提前致谢。

适配器

public class OrderStatusAdapter extends FragmentStatePagerAdapter {


private final List<Fragment> mFragments = new ArrayList<>();
private final List<String> mFragmentTitles = new ArrayList<>();

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

public void addFragment(Fragment fragment, String title) {
    mFragments.add(fragment);
    mFragmentTitles.add(title);
}

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

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

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

}

查看页面

    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    if (viewPager != null) {
        setupViewPager(viewPager);
        if (viewPager != null) {
          viewPager.setAdapter(adapter);
          tabLayout = (TabLayout) findViewById(R.id.orderStatusTabs);
          tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
          tabLayout.setupWithViewPager(viewPager);
          tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                            @Override
                            public void onTabSelected(TabLayout.Tab tab) {
                                viewPager.setCurrentItem(tab.getPosition());
                            }

                            @Override
                            public void onTabUnselected(TabLayout.Tab tab) {

                            }

                            @Override
                            public void onTabReselected(TabLayout.Tab tab) {

                            }
                        });
          }
    }

    private void setupViewPager(ViewPager viewPager) {
    OrderStatusAdapter adapter = new OrderStatusAdapter(getSupportFragmentManager());
    adapter.addFragment(FailedFragment.newInstance(list1, title), "Category 1");
    adapter.addFragment(FailedFragment.newInstance(list2, title), "Category 2");
    adapter.addFragment(FailedFragment.newInstance(list3, title),       "Category 3");
    adapter.addFragment(FailedFragment.newInstance(list4, title),       "Category 4");

    }

【问题讨论】:

  • 您需要提供您的代码。听起来您的标签位置与查看器寻呼机位置有一个错误。
  • 请检查已编辑的问题@LarrySchiefer
  • 不确定这是否相关,但您拨打了您的viewPager.setAdapter() 两次,一次是在setupViewPager(),然后一次。
  • 你在哪里将标签添加到TabLayout?此外,您没有创建OrderedAdapter 的实例并将其设置为ViewPager 的适配器。
  • 我修改了代码 sn-p...我没有在此处添加任何选项卡。而是将 tablayout 设置为 viewpager tabLayout.setupWithViewPager(viewPager);@LarrySchiefer

标签: android android-fragments android-viewpager


【解决方案1】:

这都是因为 RecycleView 自定义适配器的实例没有被破坏,所以之前的数据正在加载。所以我在片段内移动了适配器,它成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多