android listview getviewtypecount和getItemViewType
package newdemo.jeno.listviewdemo; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map; public class TestAndroidActivity extends Activity { EditText msgContent;
ListView listView;
BaseAdapter adapter;
ArrayList<Map<String, String>> data = new ArrayList<Map<String, String>>(); /**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initViews();
} private void initViews() {
msgContent = (EditText) findViewById(R.id.content);
Button btnSend = (Button) findViewById(R.id.send);
btnSend.setOnClickListener(onClickListener);
Button btnReceive = (Button) findViewById(R.id.receive);
btnReceive.setOnClickListener(onClickListener);
Button btnPic = (Button) findViewById(R.id.pic);
btnPic.setOnClickListener(onClickListener);
listView = (ListView) findViewById(R.id.list);
adapter = new TestAdapter();
listView.setAdapter(adapter);
} private View.OnClickListener onClickListener = new View.OnClickListener() { public void onClick(View v) {
Map<String, String> item;
item = new HashMap<String, String>();
switch (v.getId()) {
case R.id.pic:
item.put("type", TYPE_PIC + "");
item.put("content", "图片");
break;
case R.id.send:
item.put("type", TYPE_SEND + "");
item.put("content", "发送消息" + msgContent.getText().toString().trim());
break;
case R.id.receive: item.put("type", TYPE_RECEIVE + "");
item.put("content", "收到消息" + msgContent.getText().toString().trim());
break;
}
data.add(item);
adapter.notifyDataSetChanged();
msgContent.setText("");
}
}; class TestAdapter extends BaseAdapter { public int getCount() {
return data.size();
} public Object getItem(int position) {
if (position < getCount()) {
return data.get(position);
}
return null;
} public long getItemId(int position) { return 0;
} public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView::" + position);
int type = TYPE_SEND;
try {
type = Integer.parseInt(data.get(position).get("type"));
} catch (Exception e) {
e.printStackTrace();
}
ViewHolder holder = null;
if (convertView == null) {
System.out.println("getView::convertView is null");
holder = new ViewHolder();
switch (type) {
case TYPE_SEND:
convertView = View.inflate(getBaseContext(),
R.layout.listitem_send, null);
holder.text = (TextView) convertView
.findViewById(R.id.message);
break;
case TYPE_RECEIVE:
convertView = View.inflate(getBaseContext(),
R.layout.listitem_receive, null);
holder.text = (TextView) convertView
.findViewById(R.id.message);
break;
case TYPE_PIC:
convertView = new ImageView(getBaseContext());
((ImageView) convertView).setImageResource(R.drawable.icon);
break;
}
convertView.setTag(holder);
} else {
System.out.println("getView::convertView not null");
holder = (ViewHolder) convertView.getTag();
} if (type != TYPE_PIC) {
String msg = data.get(position).get("content");
holder.text.setText(msg);
}
return convertView;
} public int getItemViewType(int position) {
int type = super.getItemViewType(position);
try {
type = Integer.parseInt(data.get(position).get("type"));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("getItemViewType::" + position + " is " + type);
return type;
} public int getViewTypeCount() {
System.out.println("getViewTypeCount is " + 3);
return 3;
} class ViewHolder {
TextView text;
}
} /**
* 发送的消息
*/
private static final int TYPE_SEND = 0;
/**
* 收到的消息
*/
private static final int TYPE_RECEIVE = TYPE_SEND + 1;
/**
* 图片
*/
private static final int TYPE_PIC = TYPE_RECEIVE + 1; } 一个项目说明问题
注意的是:
在
public int getItemViewType(int position) {
int type = super.getItemViewType(position);
try {
type = Integer.parseInt(data.get(position).get("type"));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("getItemViewType::" + position + " is " + type);
return type; //次地方返回的类型一定要比下面的
getViewTypeCount的数值小 比如 下面的count返回的是3 怎这个地方最大是2 就是返回的是数组的角标
} public int getViewTypeCount() {
System.out.println("getViewTypeCount is " + 3);
return 3;
}
android listview getviewtypecount和getItemViewType的更多相关文章
- Android ListView Adapter的getItemViewType和getViewTypeCount多种布局
<Android ListView Adapter的getItemViewType和getViewTypeCount多种布局> 在Android的ListView中.假设在一个Lis ...
- Android ListView getViewTypeCount 的返回值问题解决
最近在学慕课网上的一个实战课程,期间有一个智能聊天机器人模块. 聊天界面通过 ListView 显示,用 Adapter 加载.一般来说,单对单的聊天,两者发出的话分别列在聊天页面的左右两边.所以,在 ...
- Android Adapter的getViewTypeCount和getItemViewType
Adapter的getViewTypeCount和getItemViewType 不同的项目布局(item layout) 我们再举一个稍微复杂的例子,在上例的list中加入一些分隔线 你需要做这些: ...
- android listview Caused by: java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
android listview 适配器在多种类型viewType报错: Caused by: java.lang.ArrayIndexOutOfBoundsException: length=3; ...
- android listview需要呈现多个布局
android listview需要呈现多个布局 之前的做法很笨 在getView()方法里面,不仅将viewHolder作为tag属性设置给convertView 还将当前的position作为ta ...
- Android ListView工作原理完全解析,带你从源码的角度彻底理解
版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[+] Adapter的作用 RecycleBin机制 第一次Layout 第二次Layout 滑动加载更多数据 转载请注明出处:h ...
- Android ListView工作原理全然解析,带你从源代码的角度彻底理解
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android全部经常使用的原生控件其中.使用方法最复杂的应该就是 ...
- android ListView 九大重要属性详细分析、
android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...
- Android ListView onItemClick Not Work
Android ListView onItemClick Not Work ListView item中有Button和RadioButton的时候,它的Item点击事件不起作用,需要设置item的属 ...
随机推荐
- JAVA 程序设置运行内存
1.修改jdk设置 2.如果不行则 一般安装完eclipse之后,在安装目录下你应该可以看到有一个 eclipse.ini 文件,对了,就是在这个文件里面修改 -vmargs:说明后面是VM的参数 - ...
- UEditor 之查询当前编辑区域的状态是源码模式还是可视化模式
在使用百度的编辑器的时候,遇到了这样的一个问题: 解决方法是 使用了两个命令:
- zImage转换为uImage
写个随笔,备忘! 拿到一个内核后,首先将其make为zImage,步骤: 1.将与要移植的系统的配置文件拷贝给.config cp xxx_xxx .config 2.修改Makefile,指定平台构 ...
- CSS 关于IE6 margin 为负数 负值的时候 正常显示的方法
一定要加position: relative; 有时候比如margin-left的负数,还需要加上如 float:left 属性.
- java里的基本数据类型
java里一共有八大数据类型 boolean(未定) char(2字节) byte(1字节) short(2字节) int(4字节) long(8字节) float(4字节) double(8字节), ...
- PC上安装多个操作系统
目 录 第1章 绪论 1 1.1 目标 1 1.2 适宜的读者 1 第2章 制作启动U盘 2 2.1 初级安装 2 2.2 启动分析 3 2.3 高级安装 1 ...
- css禁止用户选中文本(转)
body{ -moz-user-select:none;/*火狐*/ -webkit-user-select:none;/*webkit浏览器*/ -ms-user-select:none;/*IE1 ...
- js高级程序设计(三)基本概念
数据类型 ECMAscript中有五种简单数据类型Undefined,Null,Boolean,Number,String 还有一种复杂数据类型Object. typeof操作符 typeof可能返回 ...
- mouseover,mouseenter,mouseleave,mouseout
mouseover和mouseout对应 //鼠标移入移出触发该元素及子元素 mouseenter和mouseleave对应 //鼠标移入移出只触发该元素 看完例子即可知道其区别: mouseover ...
- discuz核心函数库function_core的函数注释
/** * 系统错误处理 * @param <type> $message 错误信息 * @param <type> $show 是否显示信息 * @param <typ ...