栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java.lang.UnsupportedOperationException: Required method instantiateItem was not overridden

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java.lang.UnsupportedOperationException: Required method instantiateItem was not overridden

报错:
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);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号