热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ListView多布局展示异常数组下标越界

ListView多布局展示用处很多该异常如下:这是怎么回事呢?具体代码如下:publicstaticfinalintTYPE_MALE1;

ListView多布局展示用处很多
该异常如下:
这里写图片描述

这是怎么回事呢?
具体代码如下:

    public static final int TYPE_MALE = 1;
    public static final int TYPE_FEMALE = 2;
   @Override
    public int getViewTypeCount() {
        return 2;
    }
    @Override
    public int getItemViewType(int position) {
        String sex = list.get(position).getSex();
        switch (sex) {
            case "男":
                return TYPE_MALE;
            case "女":
                return TYPE_FEMALE;
            default:
                return TYPE_MALE;
        }
    }

TYPE_MALE = 1和TYPE_FEMALE = 2,这两个值不可以随意赋值,必须从0开始,一次增大

对代码做修正其他地方,无需修改就可以正常运行了

    public static final int TYPE_MALE = 0;
    public static final int TYPE_FEMALE = 1;
        @Override
    public int getViewTypeCount() {
        return 2;
    }
    @Override
    public int getItemViewType(int position) {
        String sex = list.get(position).getSex();
        switch (sex) {
            case "男":
                return TYPE_MALE;
            case "女":
                return TYPE_FEMALE;
            default:
                return TYPE_MALE;
        }
    }

listView的多布局展示中getView方法最重要,再次贴出该段代码

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View ret = null;
        ViewHolder1 holder1 = null;
        ViewHolder2 holder2 = null;
        int type = getItemViewType(position);

        //进行复用,如果convertView为空,根据type生成对应布局
        if (convertView != null) {
            ret = convertView;
        } else {
            switch (type) {
                case TYPE_MALE:
                    ret = LayoutInflater.from(context).inflate(R.layout.item_man, null);
                    break;
                case TYPE_FEMALE:
                    ret = LayoutInflater.from(context).inflate(R.layout.item_femal, null);
                    break;
            }
        }
        //实例化ViewHolder ,findViewById
        switch (type) {
            case TYPE_MALE:
                holder1 = (ViewHolder1) ret.getTag();
                if (holder1 == null) {
                    holder1 = new ViewHolder1();
                    holder1.man_image = ((ImageView) ret.findViewById(R.id.man_image));
                    holder1.man_name = ((TextView) ret.findViewById(R.id.man_name));
                    holder1.sex = ((TextView) ret.findViewById(R.id.sex));
                    ret.setTag(holder1);
                }
                break;
            case TYPE_FEMALE:
                holder2 = (ViewHolder2) ret.getTag();
                if (holder2 == null) {
                    holder2 = new ViewHolder2();
                    holder2.female_image_One= ((ImageView) ret.findViewById(R.id.femal_image_one));
                    holder2.female_image_two = ((ImageView) ret.findViewById(R.id.femal_image_two));
                    holder2.female_name = ((TextView) ret.findViewById(R.id.femal_name));
                    holder2.sex = ((TextView) ret.findViewById(R.id.sex));
                    ret.setTag(holder2);
                }
                break;
        }
        //进行赋值
        switch (type) {
            case TYPE_MALE:
                holder1.man_image.setImageResource(list.get(position).getImage());
                holder1.man_name.setText(list.get(position).getName());
                holder1.sex.setText(list.get(position).getSex());
                break;
            case TYPE_FEMALE:
                holder2.female_image_one.setImageResource(list.get(position).getImage());
                holder2.female_image_two.setImageResource(list.get(position).getImage());
                holder2.female_name.setText(list.get(position).getName());
                holder2.sex.setText(list.get(position).getSex());
                break;
        }
        return ret;
    }

推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
author-avatar
三喜金融
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有