Android ViewPager和FragmentStatePagerAdapter - 未在第一项

时间:2016-12-01 18:26:20

标签: android android-viewpager

我有一个包含项目列表的视图。当我点击特定的listitem时,它会在新活动(和新片段)中显示该特定对象的详细信息。一切正常。

现在我想添加一个功能,用户可以从选中的详细活动显示项目滑动到下一个/上一个项目,这样他就不必返回列表并选择其他项目了。我尝试使用ViewPager和FragmentStatePagerAdapter,它的工作原理非常好。

我的Activity.java:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exercise);

        // Instantiate a ViewPager and a PagerAdapter.
        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);

    ...
    }

   private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
        // pos is the position of the object in the list    
            Fragment fragment = ExerciseFragment.newInstance(exercisesArray, pos+position);
            return fragment;
        }

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

我的问题:

  1. ViewPager是否符合我的意图?用户一直刷到下一个项目,就会实例化一个新的片段。该列表可以包含大约100个项目......所以可能创建了100个片段?这可能是个问题吗?

  2. 如果选择并滑动第一个项目,我的实现只能正常工作。例如:我在列表中有5个项目,并且单击了第一个项目。现在我可以滑到第二项,第三项,再到第二项。但是如果用户点击列表中的第三项,我就不能向左滑动到第二项和第一项!有人有想法吗?

  3. 非常感谢!

1 个答案:

答案 0 :(得分:1)

您不需要在viewpager中预先加载所有片段,以决定要预先加载的片段数量限制,使用viewPager.setOffscreenPageLimit(yourDesiredIntegerValue); 有关详情,see this Ñ

注意:您无法将此限制设置为零,但即使您尝试设置此限制,viewpager也会忽略它并将此限制设置为1(默认值)。

关于第二个问题,请将您的活动保留在后台,当您的用户返回时,正常的流程将会跟进。就这么简单。