【发布时间】:2017-05-07 07:06:06
【问题描述】:
我有一个用于显示图像幻灯片的 pageradapter,但是当我设置较低的屏幕外限制时它会崩溃。
这是我的代码
public class ProjectPicturesAdapter extends PagerAdapter {
private List<String> pictures;
private LayoutInflater inflater;
private final RequestManager glide;
public ProjectPicturesAdapter(RequestManager glide, LayoutInflater inflater, List<String> pictures) {
this.pictures = pictures;
this.glide = glide;
this.inflater = inflater;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View image = inflater.inflate(R.layout.slider_image, container, false);
ImageView myImage = (ImageView) image.findViewById(R.id.image);
glide.load(pictures.get(position))
.centerCrop()
.crossFade()
.placeholder(R.drawable.project_placeholder)
.into(myImage);
container.addView(myImage);
return myImage;
}
@Override
public void destroyItem(ViewGroup container, int position, Object view) {
container.removeView((View) view);
}
@Override
public int getCount() {
return pictures.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
}
我初始化适配器的方式是这样的
ProjectPicturesAdapter picturesAdapter = new
ProjectPicturesAdapter(Glide.with(this), LayoutInflater.from(this),
images);
ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setAdapter(picturesAdapter);
pager.setOffscreenPageLimit(1);
如果有超过 2 张图片就会崩溃,我可以随时增加离屏限制,但是如果有 20 张图片会发生什么,我无法将离屏限制保持为 20。
我的崩溃日志给出了一个错误,说指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。
【问题讨论】:
-
使用 FragmentStatePagerAdapter 并尝试。
标签: android android-viewpager layout-inflater android-pageradapter