Android ViewPager 和 FragmentStatePagerAdapter - 第一项未启动

3
我是一位乐于助人的助手,我可以为您翻译文本。
我有一个包含项目列表的视图。当我点击列表中的某个项目时,它会在新的活动(和新的片段)中显示该特定对象的详细信息。这都很正常。
现在,我想添加一个功能,使用户可以从所选详细活动中显示的项目向下/向上滑动,因此他不必返回列表并选择另一个项目。我尝试使用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个项目的列表,第一个被点击。现在我可以向右滑动到第二项,到第三项,回到第二项。但是如果用户点击列表的第三项,我就无法向左滑动到第二项和第一项!任何人有想法吗?

非常感谢!


4
请提供代码片段,以便更容易理解和识别您的实现中可能存在的问题。 - Dmitri Timofti
我添加了一些我的详细活动代码。我的问题是,当点击和下一个项目时调用pagerAdapter(并在滑动到下一个和下一个...时)。我无法在单击前滑动到某个项目。 - Raspberry
关于第一个问题,您可以限制预先实例化的片段数量,例如如果您设置为5,则会实例化5个片段,当您滑动到第6个片段时,第一个片段将从堆栈中移除。请参见此处 - nobalG
1个回答

2
你不需要在viewpager中预先加载所有片段,要决定你想预先加载的片段数量限制,请使用viewPager.setOffscreenPageLimit(你所需的整数值);。更多信息,请查看此处注意: 你不能将此限制设置为零,但即使你尝试设置它,viewpager也会忽略它并将此限制设置为1(默认)。
至于第二个问题,将你的活动保留在后台堆栈中,当用户返回时,正常流程将继续进行。就这么简单。

谢谢nobalG,我将尝试setOffscreenPageLimit :-)关于第二个问题:很抱歉,我是Android新手,不理解你的答案。如果我的列表中有5个项目,并单击第三个项目,则可以在详细视图中查看它(使用位置0调用getItem()),然后可以向右滑动以查看第四个项目。但我无法向左滑动以查看第二个项目。有什么想法吗? - Raspberry
通过保持活动在后台,我指的是当用户在ViewPager中点击一个项目时,启动一个新的活动并在那里显示详细信息,当用户通过按返回键回到第一个活动(带有ViewPager的活动)时,他将能够向任何方向移动。 - nobalG
有没有可能支持向左滑动以显示上一个项目,而不必返回到我的列表活动?这就是我想做的。 - Raspberry
我明白了...getItem()总是从位置0开始,而我添加了所选项目的位置。相反,在onCreate()中使用mPager.setCurrentItem(pos),并在getItem()内使用“ExerciseFragment.newInstance(exercisesArray,position);”。非常简单 - 感谢您的帮助! - Raspberry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接