我正在尝试实现一个始终加载新图像的图库,无论用户是向左还是向右滑动。我所做的是告诉我的 PagerAdapter.instantiateItem(v,position)
在 mPosition++
加载图像,其中 mPosition
被初始化为 0。 注意我没有使用提供的 position
。
public class ViewPagerAdapter extends PagerAdapter {
private Context mContext;
private ImageFactory mImageFactory;
private int mPosition;
public ViewPagerAdapter(Context c) {
mContext = c;
mImageFactory = ImageFactory.instance();
mPosition = 0;
}
@Override
public int getCount() {
return mImageFactory.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((FrameLayout) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.viewpager_item, container,
false);
// Locate the ImageView in viewpager_item.xml
ImageView imgflag = (ImageView) itemView.findViewById(R.id.flag);
// Load Bitmap to ImageView
mImageFactory.loadImage(imgflag, mPosition++);
// Add viewpager_item.xml to ViewPager
((ViewPager) container).addView(itemView);
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// Remove viewpager_item.xml from ViewPager
((ViewPager) container).removeView((FrameLayout) object);
}
}
但这不起作用,我猜这是因为 ViewPager
缓存了页面。
所以我不知道我的假设是对还是错,但我将不胜感激任何建议。
谢谢!
最佳答案
PagerAdapter 具有以下您可以覆盖的方法:
setPrimaryItem 正如文档所述:“调用以通知适配器当前认为哪个项目是“主要的”,即显示给用户的当前页面。”
所以它可以用作更新图像的钩子(Hook)。如果您需要更新屏幕外的页面,则需要保留对已实例化 View 的引用(注意不要泄漏 View )。
此外,请查看 Jake Wharton RecyclingPagerAdapter。太棒了!
关于Android:实现只加载新页面的ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659182/