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

聊天界面通过 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

Android ListView getViewTypeCount 的返回值问题解决的更多相关文章

  1. Android webview 取得javascript返回值

    package com.she.jyass.UI; import android.content.Context; import android.webkit.WebView; public clas ...

  2. Android课程---Activity 带返回值的跳转

    Activity2.java package com.hanqi.test4; import android.content.Intent; import android.os.Bundle; imp ...

  3. Android 使用intent传递返回值:startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回

    在一个父Activity通过intent跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回父页面,将子activity中得到的数据显示在主界面/完成的数据交给父Activity处理 ...

  4. spring aop影响dubbo返回值问题解决

    问题描述: dubbo服务已经注册,客户端调用提供者服务返回值为空.(考虑动态代理.aop的返回值影响,dubbo基于spring2.5.6.SEC03,本次开发使用的是spring4.3.8) 解决 ...

  5. android listview getviewtypecount和getItemViewType

    package newdemo.jeno.listviewdemo; import android.app.Activity;import android.os.Bundle;import andro ...

  6. android activity之间传递返回值

    activity A,跳转至 Activity B ,A传参数user_name给B,然后B再返回修改后的参数user_name给A 首先A传user_name给B Intent input_B = ...

  7. android中onStartActivityForResult无返回值问题

    在activity间跳转传递参数,常见方法是通过onStartActivityForResult来做.不过今天使用 onStartActivityForResult的时候已经在上一个activity调 ...

  8. Android中onActivityResult()获取返回值

    需求:从FirstActivity跳到SecondActivity,在SecondActivity中进行了操作并返回到FirstActivity. FirstActivity中的主要代码: priva ...

  9. Android: ListView与Button的共存问题解决

    ListView 和 其它能触发点击事件的widget无法一起正常工作的原因是加入其它widget后,ListView的itemclick事件将无法触发,被其它widget的click事件屏蔽.   ...

随机推荐

  1. liunx下常见的命令汇总

    前言:这篇文章对于工作多年的可能用处不大,但对于刚刚接触Java的同学肯定是有一些帮助,现在我总结我接触liunx后常见的一些命令 1:日志查询常用的命令 ll:查询目录下所有的文件 ls -lht: ...

  2. java-多个数的和

    目的:实现多个整数相加. 思路:1.首先要确定用户所需整数的个数n,此部分由用户在键盘上输入. 2.创建一个长度为n的数组. 3.用户从键盘上输入n个整数并判断是否输入正确,正确则存入数组,否则重新输 ...

  3. 【C#多线程编程实战笔记】二、 线程同步

    使用Mutex类-互斥锁 owned为true,互斥锁的初始状态就是被主线程所获取,否则处于未获取状态 name为定义的互斥锁名称,在整个操作系统只有一个命名未CSharpThreadingCookb ...

  4. 使用设置sa用户登录sql server2008

    今天在net项目中添加数据库过程中出现了小问题,就是使用sql server身份验证没登录成功,经过一番调试,终于解决问题. 使用sa账户登录sql server 2008 的方法步骤如下: 1.首先 ...

  5. setTimeout,setInterval你不知道的事

    javascript线程解释(setTimeout,setInterval你不知道的事) 标签: javascript引擎任务浏览器functionxmlhttprequest 2011-11-21 ...

  6. Spring mybatis源码篇章-NodeHandler实现类具体解析保存Dynamic sql节点信息

    前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-XMLLanguageDriver解析sql包装为SqlSource SqlNode接口类 publi ...

  7. 201521123122 《java程序设计》第八周实验总结

    201521123122 <java程序设计>第八周实验总结 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 List中指定元素的删除(题目4- ...

  8. 201521123059 《Java程序设计》第三周学习总结

    1. 本周学习总结 2. 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...

  9. 201521123001《Java程序设计》第1周学习总结

    1. 本周学习总结 java和我们以前学的C语言的区别大致有: C语言可以直接操作内存,java不能直接操作: C语言的代码不能跨平台,java的代码可以跨平台: C语言有指针,java没有指针: C ...

  10. 201521123011《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...