报错:
java.lang.UnsupportedOperationException: Required method instantiateItem was not overridden
出现场景:
在Android Studio中初次使用viewPager。
错误显示:
从主页面跳转至显示viewPager的页面时程序直接关闭。
原因判断:
自定义PagerAdapter中未重写instantiateItem方法
问题解决:
在PagerAdapter中重写了instantiateItem方法与destroyItem方法(这个不写也会报错)
原因分析:
自定义PagerAdapter由于是继承PagerAdapter,需要重写其定义的四个接口方法:
//用于返回viewPager中的view数量 getCount() //将给定位置的view添加到viewGroup中,创建并显示出来 ——> 返回一个代表新增页面的key(Object) instantiateItem() //判断instantiateItem所返回的key是否与一个页面视图对应 isViewFromObject() //移除一个给定position的页面 destroyItem()
要点牢记:
重写PagerAdapter类时一定要重写相应的四个方法。
整体代码:
修正前:
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import java.util.ArrayList;
public class MyPageViewAdapter extends PagerAdapter {
private ArrayList viewLists;
public MyPageViewAdapter(ArrayList viewLists) {
super();
this.viewLists = viewLists;
}
@Override
//获取页面内的view数量
public int getCount() {
return viewLists.size();
}
@Override
//判断key是否于view对应
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
}
修正后:
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import java.util.ArrayList;
public class MyPageViewAdapter extends PagerAdapter {
private ArrayList viewLists;
public MyPageViewAdapter(ArrayList viewLists) {
super();
this.viewLists = viewLists;
}
@Override
//获取页面内的view数量
public int getCount() {
return viewLists.size();
}
@Override
//判断key是否于view对应
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewLists.get(position));
}
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewLists.get(position));
return viewLists.get(position);
}
}



