当前位置: 首页 > article >正文

Android:ViewPaper动态添加移除第一页

问题:

动态改变itemList之后,调用notifyDataSetChanged();没有作用。

原因:

原因是PagerAdapter内部的getItemPosition方法获取的值是固定POSITION_UNCHANGED,表示未改变,所以不更新。

解决:

要更新则重写这个方法,返回POSITION_NONE。那么调用notifyDataSetChanged()方法每个界面都会更新。如果是动态添加移除最后一页,那么前面所有item是不需要更新的,就会造成资源浪费。这里我是动态添加移除第一页,其他每页都会前移一页,所以每项item都是有改变的,所以需要所有都更新,我这边就直接返回POSITION_NONE了。如需求不同可根据getItemPosition方法传进来的object参数(实际上就是itemList里面的view)判断是否需要更新来返回不同值。

完整参考代码:

public class MyAdapter extends PagerAdapter {

        private final List<View> itemList;

        public MyAdapter(List<View> list) {
            this.itemList = list;
        }

        public void addToFirst(View view) {
            if (itemList != null && !itemList.isEmpty()) {
                View currentView = itemList.get(0);
                if (currentView != null && currentView == view) {
                    return;
                }
                itemList.add(0, view);
                notifyDataSetChanged();
            }
        }

        public boolean isFirstView(View view) {
            if (itemList != null && !itemList.isEmpty()) {
                return itemList.get(0) == view;
            }
            return false;
        }

        public void removeFirstItem() {
            if (itemList != null && !itemList.isEmpty()) {
                itemList.remove(0);
                notifyDataSetChanged();
            }
        }

        @Override
        public int getCount() {
            return itemList.size();
        }

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            View view = itemList.get(position);
            container.addView(itemList.get(position));
            return view;
        }

        @Override
        public int getItemPosition(@NonNull Object object) {
            return POSITION_NONE;
        }

        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            if (object instanceof View){
                container.removeView((View) object);
            }
        }

        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
            return view == o;
        }
    }


http://www.kler.cn/a/373868.html

相关文章:

  • OpenCV基础01
  • ValueError: Object arrays cannot be loaded when allow_pickle=False
  • 【python】极简教程14-文件
  • 【应用日志】logback-spring配置详细说明
  • 利用摄像机实时接入分析平台LiteAIServer视频智能分析软件进行视频监控:过亮过暗检测算法详解
  • safetensor存取pytorch模型参数、玄数据简例
  • ssm017网上花店设计+vue(论文+源码)_kaic
  • Django - 验证码使用
  • Python基础学习(八)断点调试
  • HTML入门教程19:HTML ID
  • 软件项目管理要点
  • 深度学习:yolo的使用--图像处理
  • 任意文件下载
  • 后端Java学习:springboot之文件上传(阿里云OSS存储)
  • object_model_3d_to_xyz 自理解及操作
  • Java设计模式之代理模式(三)
  • nmcli命令网络配置详解
  • 手动写一个new
  • 华为防火墙配置-基于IP地址和端口的安全策略
  • Docker快速安装Loki
  • JavaScript Prototype
  • 控制器一些不常用的的功能说明
  • 算法的基本概念@性能分析初步@复杂度分析初步
  • 《高频电子线路》 —— 高频谐振功放(2)
  • 【SQL实战】——数据查询
  • Anaconda和Pycharm超详细安装教程(2024版本+Win11)