我有一个ViewPager
嵌套在RecyclerView
个项目中,我需要ViewPager
来记住用户选择的最后一页。
当我滚动到最后一个项目然后回到第一个项目时,ViewPager
位置被"泄露"到ViewPager
个项目的其他RecyclerView
。
请参阅下面的GIF:
我在Github上针对此问题制作了一个示例项目: https://github.com/alaouiali/BnbRecyclerView
现在代码!
首先,这是我用来填充RecyclerView的示例对象,我使用position
变量来保存用户最后选择的页面。
public class ParentItem {
String text;
int position; //-- Here we save the ViewPager selected page
public ParentItem(String text) {
this.text = text;
this.position = 0;
}
public String getText() {
return text;
}
public int getPosition() {
return position;
}
public void setPosition(int pos) {
this.position = pos;
}
}
以下是RecyclerView.Adapter
:
public VerticalAdapter(Context context, List<ParentItem> myDataset, int appWidth) {
mDataset = myDataset;
mContext = context;
mAppWidth = appWidth;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.mViewPager.setCurrentItem(mDataset.get(position).getPosition());
holder.mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int positionPager) {
mDataset.get(position).setPosition(positionPager);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}