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

聊天界面通过 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. 利用HTML5的window.postMessage实现跨域通信

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp77   HTML5的window.postMessage简述 postM ...

  2. 在tomcat7中启用HTTPS的详细配置

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt385 最简单的方法,直接用java里的keytool工具生成一个keysto ...

  3. poj 2762 强连通缩点+拓扑排序

    这题搞了好久,先是拓扑排序这里没想到,一开始自己傻乎乎的跑去找每层出度为1的点,然后才想到能用拓扑排序来弄. 拓扑排序的时候也弄了挺久的,拓扑排序用的也不多. 题意:给一个图求是否从对于任意两个点能从 ...

  4. [自制操作系统] BMP格式文件读取&图形界面系统框架/应用接口设计

    本文将介绍在本人JOS中实现的简单图形界面应用程序接口,应用程序启动器,以及一些利用了图形界面的示例应用程序. 本文主要涉及以下部分: 内核/用户RW/RW调色板framebuffer共享区域 8bi ...

  5. 如何使用Git和码云Git@OSC

    1.Git简介 关于Git是什么,阅读博客Git简介 2.Git 基础 Git命令很多,常用命令如下图 Workspace:工作区 Index/Stage :暂存区 Local Repository: ...

  6. 【Alpha】 第七次Daily Scrum Meeting

    一.本次会议为第七次meeting会议 二.时间:9:37AM-9:50AM 地点:禹州三楼 三.会议站立式照片 四.今日任务 成员 昨日任务 今日任务 林清青 学习并了解微信程序相关方面知识,为小组 ...

  7. 201521123104 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点 1.2 可选:使用常规方法总结其他上课内容. 1.接口不是类,不能使用new进行实例化; 2.接口可以扩展; 3.接口中可以包含 ...

  8. 201521123035《Java程序设计》第十周实验总结

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

  9. idea使用转载【别人的专栏】

    维C果糖

  10. temp-存储过程 以前的

    ---------------------------------------------------------------------------------------------------- ...