ViewPager 显示预加载片段而不是当前片段
ViewPager showing preloaded fragment instead of current fragment
我正在使用 Tablayout(android.support.design.widget.TabLayout) 和 ViePager,将 4 个片段实例化到 FragmentStatePagerAdapter。
当我滚动浏览所有片段时,perfectly.But 当我 select 时,显示一个标签随机预加载的片段(我知道视图寻呼机沿当前片段实例化相邻片段)而不是当前片段。
[在我的例子中,当我点击第 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 = (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");
}
这都是因为 RecycleView 自定义适配器的实例没有被销毁,所以以前的数据是 loaded.So 我将适配器移到片段中,它成功了。
我正在使用 Tablayout(android.support.design.widget.TabLayout) 和 ViePager,将 4 个片段实例化到 FragmentStatePagerAdapter。
当我滚动浏览所有片段时,perfectly.But 当我 select 时,显示一个标签随机预加载的片段(我知道视图寻呼机沿当前片段实例化相邻片段)而不是当前片段。
[在我的例子中,当我点击第 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 = (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");
}
这都是因为 RecycleView 自定义适配器的实例没有被销毁,所以以前的数据是 loaded.So 我将适配器移到片段中,它成功了。