• Android ListView getViewTypeCount 的返回值问题解决


    最近在学慕课网上的一个实战课程,期间有一个智能聊天机器人模块。

    聊天界面通过 ListView 显示,用 Adapter 加载。一般来说,单对单的聊天,两者发出的话分别列在聊天页面的左右两边。所以,在 Adapter 里需要设置一个 Type 来区分发送方和接收方,从而正确显示左右。

    在课程视频里,老师是这么区分 Type 的:

        //左边的type
        public static final int VALUE_LEFT_TEXT = 1;
        //右边的type
        public static final int VALUE_RIGHT_TEXT = 2;
    

    然后,当写到 getViewTypeCount 这个类的时候,老师是这么写的:

        @Override
        public int getViewTypeCount() {
            return 3; //mList.size + 1
        }
    

    在 "return 3;" 后面的注释里写的是 "mList.size + 1" 。老师说也可以返回这条语句来替换 3。

    于是,我用了注释里的方法:

        @Override
        public int getViewTypeCount() {
            return mList.size + 1
        }
    

    之后,运行程序时,能正常进入并加载聊天界面,但是当点击显示 Type 为右边的 Item 时,Crash 退出。

    Crash 的报错为 "java.lang.ClassCastException",与问题无关。

    经过搜索得知,最终问题是出现在 Type 的返回值上。

    其实,一开始在定义 Type 的类型时,应该这样写:

        /*
        * Item类型,int型,必须从0开始依次递增
        * */
        //左边的type
        public static final int VALUE_LEFT_TEXT = 0;
        //右边的type
        public static final int VALUE_RIGHT_TEXT = 1;
    

    如注释里所说的,Item 的类型是 int 值,并且必须从 0 开始递增。然后在 getViewTypeCount 里,return 的返回值可以是 "mList.size + 1"。改好后程序正常运行。

    以上是搜索得知的一个方法。

    另外,我还试了下,将 Type 的值分别设为 2 和 3,getViewTypeCount 里 return 返回值 4。或者 type 的值分别为 4 和 5,return 6。这样子也能正常运行。也就是说,只要是 type 的值是连续的数字,那在 getViewTypeCount 里可以 return type的最大值加一。

    具体的解析,可以参考如下这篇文章,写得不错,我在这里就不做过多说明了:

    http://www.cnblogs.com/RGogoing/p/5872217.html

  • 相关阅读:
    正则表达式
    jquery获取(设置)节点的属性与属性值
    Easy UI
    javascript中数组常用的方法
    DOM节点
    Echarts的基本用法
    CSS小结
    草稿1
    CSS基础
    wordbreak:breakall和wordwrap:breakword的区别
  • 原文地址:https://www.cnblogs.com/liushengchieh/p/7645128.html
Copyright © 2020-2023  润新知