【已解决】 PagerAdapter中getCount()方法返回Integer.MAX_VALUE奔溃的问题
跟着锯大学习轮播和网络部分,在试着把两部分组合起来的时候遇到了和锯大在视频里差不多的问题,但是并不一样…
我在适配器中也写了一个供外部使用的抽象类getDataSize,返回的是数据实际数组大小。并且我没有在任何地方调用返回Integer.MAX_VALUE的getCount方法,包括小白点的创建…所有需要数据大小的地方我用的都是外面给进来的getDataSize,但是部署的时候其他组件都可以正常显示,唯独轮播图不行。我设置过他的背景观察他是存在的,但是里面的图片没法加载,我也试着把getCount方法返回一个小的数,奔溃问题解决了,无限轮播就自然有问题了…
就是说问题在于这个getCount方法,但是我没有调用它,为什么他会直接影响我app的部署。
InnerPagerAdapter类和锯大在视频中的应该是一模一样
public static abstract class InnerPagerAdapter extends PagerAdapter{
public abstract int getDataSize();
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
final int itemPosition = position % getDataSize();
View itemView = getItemView(container,itemPosition);
if (itemView.getParent() instanceof ViewGroup) {
((ViewGroup) itemView.getParent()).removeView(itemView);
}
container.addView(itemView);
return itemView;
}
protected abstract View getItemView(ViewGroup container, int itemPosition);
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
外部使用我是把网络数据拉下来之后在UI线程中调用这个applyOnlineData方法设置组合类MyLooperPager的适配器,mLooperPagerInTaoHuo是组合类的对象,适配器声明在下面
private void applyOnlineData() {
if (getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mLooperPagerInTaoHuo.setData(mInnerPagerAdapter);
}
});
}
}
这是我在组合类中的适配器,mData是服务器数据并类的List<DataBean>
private MyLooperPager.InnerPagerAdapter mInnerPagerAdapter = new MyLooperPager.InnerPagerAdapter() {
@Override
public int getDataSize() {
return mData.size();
}
@Override
protected View getItemView(ViewGroup container, int itemPosition) {
NiceImageView iv = new NiceImageView(container.getContext());
iv.setCornerRadius(18);
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
String imgUrl = mData.get(itemPosition).getPath();
if (imgUrl != null) {
Glide.with(container.getContext())
.load(imgUrl)
.placeholder(R.mipmap.img_place_holder)
.into(iv);
}
container.addView(iv);
return iv;
}
};
我只想知道为什么锯大可以返回Integer.MAX_VALUE我就不行,是不是哪个方法无意间调用了getCount…
这是fragment和组合类中的getCount…但我真没调用它


您的每一个用心回答,都会让这个世界变得更美好一些!