FragmentPagerAdapter 没有 return 来自 getItem 的正确视图

FragmentPagerAdapter does not return the correct view from getItem

首先,我有一个片段列表

icons.add(new Home()));
    icons.add(new NewsFragment()));
    for (int i=0; i<gs.pages.size(); i++) { 
        SchoolPg page = gs.pages.get(i);
        if (page.page_parent_id.equals("0")) {
            icons.add(new PageFragment()); 
        }
    }
    icons.add(new InfoFragment());

如您所见,第一个是主页,然后是新闻片段,然后是页面片段列表,最后一个是信息片段。

问题是,在 get Item 中,当我更改到 view pager position 1 时,应该是 News Fragment ,但它转到了 Page Fragment ,为什么以及如何解决它?谢谢

public class SampleFragmentPagerAdapter extends FragmentPagerAdapter {

        public SampleFragmentPagerAdapter(FragmentManager fm, Context context) {
            super(fm);
        }

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

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

        @Override
        public CharSequence getPageTitle(int position) {
            return null;
        }
    }

更新:

如果我 select 位置 2 和 select 位置 1 ,它工作, 但是,如果我 select 除了 select 1 之外的其他位置,它会失败

找到了 运行 两次

当我点击位置 1 时, 它首先 运行 位置 1 - 打开 NewsFragment 但同时 运行 位置 2 - 打开 PageFragment

你的Fragment会这样排列:

位置0: NewsFragment

位置1: PageFragment

。 . . .

位置(n-2): PageFragment

位置(n-1): InfoFragment

其中 n = icons.size();

icons 这样的数组仍然从索引 0 开始排序,这是 C 时代的遗物。希望你知道!