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

转载于:https://www.cnblogs.com/liushengchieh/p/7645128.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值