我有一个包含项目列表的 View 。当我单击特定列表项时,它会在新 Activity (和新 fragment )中显示该特定对象的详细信息。一切正常。
现在我想添加一个功能,用户可以从选定的详细 Activity 显示项目滑动到下一个/上一个项目,这样他就不必返回到列表并选择另一个项目。我尝试使用 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();
}
}
我的问题:
ViewPager 是否适合我的 Intent ?每当用户滑动到下一个项目时,都会实例化一个新 fragment 。该列表可以包含大约 100 个项目...所以可能会创建 100 个 fragment ?这会是个问题吗?
只有在第一个项目被选中并滑动时,我的实现才能正常工作。例如:我在一个列表中有 5 个项目,第一个被点击。现在我可以滑动到第二个项目,第三个项目,回到第二个。但是如果用户点击列表的第三项,我就不能向左滑动到第二项和第一项!有人有想法吗?
非常感谢!
最佳答案
您不需要在 viewpager 中预先加载所有 fragment ,为了决定您要预先加载的 fragment 数量限制,请使用 viewPager.setOffscreenPageLimit(yourDesiredIntegerValue);
更多信息,see this
注意:您不能将此限制设置为零,但即使您尝试设置它,viewpager 也会忽略它并将此限制设置为 1(默认值)。
关于第二个问题,将您的 Activity 保留在后台堆栈中,当您的用户返回到后台堆栈时,正常流程将随之而来。就这么简单。
关于Android ViewPager 和 FragmentStatePagerAdapter - 未在第一项上启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40917831/