【发布时间】:2016-12-01 18:26:20
【问题描述】:
我有一个包含项目列表的视图。当我单击特定列表项时,它会在新活动(和新片段)中显示该特定对象的详细信息。这一切都很好。
现在我想添加一个功能,用户可以从选定的详细活动显示项目滑动到下一个/上一个项目,因此他不必返回列表并选择另一个项目。我尝试使用 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 是否适合我的意图?每当用户滑动到下一个项目时,都会实例化一个新片段。该列表可以包含大约 100 个项目......所以可能创建了 100 个片段?这会是个问题吗?
只有当第一个项目被选中并滑动时,我的实现才能正常工作。例如:我在一个列表中有 5 个项目,并且单击了第一个项目。现在我可以滑动到第二个项目,第三个项目,回到第二个。但是,如果用户单击列表的第三项,我无法向左滑动到第二项和第一项!有人有想法吗?
非常感谢!
【问题讨论】:
-
请提供代码 sn-ps,以便更容易理解和识别您的实施中的潜在问题。
-
我添加了一些我的详细活动的代码。我的问题是, pagerAdapter 被称为单击和下一个项目(并在滑动时为下一个和下一个......)。我无法滑动到点击之前的项目。
-
关于第一个问题,您可以预先限制为您实例化的片段数量,例如如果您设置限制为 5,则将实例化 5 个片段,以及您何时会滑过第 6 个片段片段,第一个将从堆栈中删除。见this