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
Android ListView getViewTypeCount 的返回值问题解决的更多相关文章
- Android webview 取得javascript返回值
package com.she.jyass.UI; import android.content.Context; import android.webkit.WebView; public clas ...
- Android课程---Activity 带返回值的跳转
Activity2.java package com.hanqi.test4; import android.content.Intent; import android.os.Bundle; imp ...
- Android 使用intent传递返回值:startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回
在一个父Activity通过intent跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回父页面,将子activity中得到的数据显示在主界面/完成的数据交给父Activity处理 ...
- spring aop影响dubbo返回值问题解决
问题描述: dubbo服务已经注册,客户端调用提供者服务返回值为空.(考虑动态代理.aop的返回值影响,dubbo基于spring2.5.6.SEC03,本次开发使用的是spring4.3.8) 解决 ...
- android listview getviewtypecount和getItemViewType
package newdemo.jeno.listviewdemo; import android.app.Activity;import android.os.Bundle;import andro ...
- android activity之间传递返回值
activity A,跳转至 Activity B ,A传参数user_name给B,然后B再返回修改后的参数user_name给A 首先A传user_name给B Intent input_B = ...
- android中onStartActivityForResult无返回值问题
在activity间跳转传递参数,常见方法是通过onStartActivityForResult来做.不过今天使用 onStartActivityForResult的时候已经在上一个activity调 ...
- Android中onActivityResult()获取返回值
需求:从FirstActivity跳到SecondActivity,在SecondActivity中进行了操作并返回到FirstActivity. FirstActivity中的主要代码: priva ...
- Android: ListView与Button的共存问题解决
ListView 和 其它能触发点击事件的widget无法一起正常工作的原因是加入其它widget后,ListView的itemclick事件将无法触发,被其它widget的click事件屏蔽. ...
随机推荐
- PHP发送邮件功能--ThinkPHP3.2.3
首先第一步 :在网上down了一个PHPMailer插件,插件地址>https://github.com/PHPMailer/PHPMailer下载解压后,这里我们只需要用到其中两个文件,如 ...
- Ubuntu16.04下安装texlive
Ubuntu 16.04下安装texlive的步骤如下: 1.下载texlive 打开终端输入:sudo apt-get install texlive-full #下载这一过程会持续10-20分钟 ...
- Alpha个人总结
一.我的问题: 1.第一章1.2.1 在软件的特殊性中说到,"大型软件有超过数百万行的源代码,上万个不同的文件,而软件工程师通常一次只能看到30-80行源代码,他们的智力.记忆力和常人差不多 ...
- 【Alpha】第一次项目冲刺
今日站立式会议照片 每个人的工作 小组成员 昨天完成的工作 今天计划完成的工作 李志霖 继续访问用户以深入了解他们的需求,分别采用面访,qq等不同方式对意见进行了采集,面访了30个人,qq空间以链接的 ...
- 201521123077 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 多线程 Runnable类 表示任务的类,可以当作参数传入Thread的构造器来运行该任务 Thread类 ...
- 201521123048 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- 201521123104 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 1.1 建立数据库,将自己的姓名.学号作为一条记录插入.(截图, ...
- 解决vsftp无法启动问题(转)
[root@node11 ~]# service vsftpd restartShutting down vsftpd: [F ...
- Mybatis第八篇【一级缓存、二级缓存、与ehcache整合】
Mybatis缓存 缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. myba ...
- java实现oracle数据库基本操作
import java.sql.*; import java.util.ArrayList; import java.util.List; //使用jdbc连接 public class TestOr ...