FragmentPagerAdapter没有返回Fragment getItem(int index)的确切位置

时间:2014-12-09 10:18:37

标签: android android-fragments

enter image description here enter image description here ###大家好。 我已经使用滑动效果实现了Tab。但问题是当我点击Tab获取当前位置时,点击发生在2个位置。当我打印位置时显示位置:0
我已经尝试了,我也用谷歌搜索过。我发布了我的图片。

“所有类别”标签有另一个片段不是游戏画面。游戏片段的位置是1但不是0.但0表示其显示

帮助我任何人?同样的问题,如How switch statement in FragmentPagerAdapter's getItem() work?

我的代码是:

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;
}

}

3 个答案:

答案 0 :(得分:2)

它的工作原理如下:

当您设置适配器时,ViewPager将要求适配器显示第一个片段(索引0)和右侧(索引1)。

这是因为ViewPager总是缓存除了当前显示的页面之外的一些页面。 " some"的默认值是1但你可以用

更改它

http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

注意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();
            }
        }
    }