###大家好。
我已经使用滑动效果实现了Tab。但问题是当我点击Tab获取当前位置时,点击发生在2个位置。当我打印位置时显示位置:0
我已经尝试了,我也用谷歌搜索过。我发布了我的图片。
我的代码是:
public class TabsPagerAdapter extends FragmentStatePagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
System.out.println(index);
return new ArticlesList();
case 1:
System.out.println(index);
// Games fragment activity
return new MoviesFragment();
case 2:
System.out.println(index);
// Movies fragment activity
return new TopRatedFragment();
case 3:
System.out.println(index);
return new TopRatedFragment();
case 4:
System.out.println(index);
// Games fragment activity
return new GamesFragment();
case 5:
System.out.println(index);
// Movies fragment activity
return new MoviesFragment();
case 6:
System.out.println(index);
return new TopRatedFragment();
}
return null;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return 7;
}
}
答案 0 :(得分:2)
它的工作原理如下:
当您设置适配器时,ViewPager将要求适配器显示第一个片段(索引0)和右侧(索引1)。
这是因为ViewPager总是缓存除了当前显示的页面之外的一些页面。 " some"的默认值是1但你可以用
更改它注意0没有左邻居(索引-1),所以在开头只加载索引0和1。
现在,当您将页面索引为1时,ViewPager已在其缓存中具有相应的片段,并且可以立即显示它。但它也会向适配器询问索引2,因为它将是下一个。
同样,当您翻页到索引2时,它已经有了片段并且可以显示它。由于2没有正确的邻居(ViewPager从你的getCount中知道),没有什么可以加载......
尝试在ViewPager上设置setOffScreenPageLimit(0) - 然后ViewPager将永远不会缓存任何片段,并且在您导航到第x页时将始终调用getItem(x)。
谢谢david.mihola:https://stackoverflow.com/a/25867199/4176045
答案 1 :(得分:1)
它的作用是什么,它正在初始化两个片段...你可以看到的片段和下一个片段...如果你打印一个长片段onCreate片段你会得到清晰的想法
答案 2 :(得分:0)
FragmentManager fragmntMgr;
android.support.v4.app.FragmentTransaction ft = fragmntMgr
.beginTransaction();
// ft.setCustomAnimations(R.anim.rightsidein,0);
List<Fragment> list = fragmntMgr.getFragments();
if (list != null) {
for (Fragment element : list) {
if (element != null) {
ft.remove(element);
fragmntMgr.popBackStack();
}
}
}