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的属 ...
随机推荐
- 上传本地文件到HDFS
源代码: import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hado ...
- IE6 + png24 透明图片(滤镜)
IE6 + png24 透明图片(滤镜) .IE6png{_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true ...
- 【c++】读写txt
#include<iostrea> #include<fstream> int main() { ofstream fout;// 创建一个ofstream对象 fout.op ...
- redis+tomcat+nginx session共享
http://www.cnblogs.com/zhrxidian/p/5432886.html系列课程 简洁明了 http://blog.csdn.net/grhlove123/article/det ...
- 手把手ssm+idea
https://github.com/judasn/Basic-Multi-Module-SSM https://github.com/liyifeng1994/ssm
- Sql Server中通配符的使用
Sql Server中通配符的使用 通配符_ "_"号表示任意单个字符,该符号只能匹配一个字符."_"可以放在查询条件的任意位置,且只能代表一个字符.一个汉字只 ...
- EPPLUS之外的选择,EXCEL的操作(NPOI,POI(java))
NPOI 编辑 NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 中文名 NPOI 优 势 传统操作Excel遇到的 ...
- 【CITE】C#目录、文件、文件夹操作
1. 在一个目录下创建一个文件夹 if (!System.IO.Directory.Exists(path)) System.IO.Directory.CreateDirectory(path); ...
- C# Form内存回收
namespace WebBrowserMemoryTest { public partial class Form1 : Form { private int _Pages; public Form ...
- Qt之QSS(白色靓丽)
简述 Qt助手中有关于各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples. 白色靓丽 - 一款漂亮的QSS风格. 你可以直接使用,也可以随意转载,但请务必保 ...