《Android ListView Adapter的getItemViewType和getViewTypeCount多种布局》

在Android的ListView中。假设在一个ListView中要实现多种样式的ListView布局样式,则须要在ListView的适配器Adapter中用到:getItemViewType()和getViewTypeCount()。getViewTypeCount()告诉ListView须要载入多少种类型的Item View,getItemViewType()则告诉ListView在某一位置(position)的Item View样式是什么。

现给出一个演示样例加以。说明,本例简单的以字母A、B、C。

。。作为数据分组。然后每一个字母下有五个数据。

如图:

所有代码:

package zhangphil.listview;

import java.util.ArrayList;
import java.util.HashMap; import android.app.ListActivity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView; public class MainActivity extends ListActivity { // item view的类型总数。
private final int VIEW_TYPE_COUNT = 2; private final String DATA = "data";
private final String TYPE = "type"; private final int GROUP = -2;
private final int ITEM = -3; private ArrayList<HashMap<String, Object>> items = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); ListView listView = this.getListView(); BaseAdapter adapter = new MyBaseAdapter(); items = new ArrayList<HashMap<String, Object>>(); listView.setAdapter(adapter); // 如果我们演示以A,B,C,,,这种字符串作为分组的标签。 // 每一组装载5个子数据。
String[] groups = { "A", "B", "C", "D", "E", "F" };
int count = 0;
for (int i = 0; i < groups.length; i++) {
HashMap<String, Object> group_map = new HashMap<String, Object>();
group_map.put(TYPE, GROUP);
group_map.put(DATA, groups[i]);
items.add(group_map); for (int j = 0; j < 5; j++) {
HashMap<String, Object> data_map = new HashMap<String, Object>();
data_map.put(TYPE, ITEM);
data_map.put(DATA, "数据:" + (count++));
items.add(data_map);
}
}
} private class MyBaseAdapter extends BaseAdapter { private LayoutInflater inflater = null; public MyBaseAdapter() {
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
} @Override
public int getCount() {
return items.size();
} @Override
public Object getItem(int position) {
HashMap<String, Object> map = items.get(position);
return map.get(DATA);
} // 返回的id能够自己定制。 @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); // 依据不同的view type载入不同的布局文件。
switch (type) {
case GROUP:
convertView = inflater.inflate(
android.R.layout.simple_list_item_2, null);
TextView tv1 = (TextView) convertView
.findViewById(android.R.id.text1);
tv1.setText("分组");
tv1.setBackgroundColor(Color.RED);
TextView tv2 = (TextView) convertView
.findViewById(android.R.id.text2);
tv2.setText(getItem(position) + "");
tv2.setBackgroundColor(Color.GRAY);
break;
case ITEM:
convertView = inflater.inflate(
android.R.layout.simple_list_item_1, null);
TextView tv = (TextView) convertView
.findViewById(android.R.id.text1);
tv.setText(getItem(position) + "");
break;
} return convertView;
} // 解析view type。 // view type值是我们事先埋入到items数据集中的字段值。 // 注意!此处返回的值不要大于getViewTypeCount()的返回值。 @Override
public int getItemViewType(int position) {
HashMap<String, Object> map = items.get(position);
return (Integer) map.get(TYPE);
} // 在本例中共计有2个不同类型的view
// android.R.layout.simple_list_item_1 和
// android.R.layout.simple_list_item_1.
@Override
public int getViewTypeCount() {
return VIEW_TYPE_COUNT;
}
}
}

Android ListView Adapter的getItemViewType和getViewTypeCount多种布局的更多相关文章

  1. Android Listview & Adapter

    Listview主要有两个职责: 将数据填充到布局 处理用户的选择点击等操作 列表的显示需要三个元素: ListVeiw 用来展示列表的View 适配器(Adapter) 用来把数据映射到ListVi ...

  2. Listview多种布局的使用

    ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...

  3. [Android] ListView关于adapter多种view设置

    使用的关键点是在adapter覆盖两个方法 public int getItemViewType(int position) public int getViewTypeCount() 其它的可另go ...

  4. Android之ListView的getItemViewType和getViewTypeCount

    PS:感觉这两个方法其实还是很容易理解的,也算是给我其他两个朋友写的吧,帮他们搞清楚这两个方法的用法和概念.同时还有一些小细节问题需要注意. 学习内容: 1.getItemViewType和getVi ...

  5. Android ListView添加多种类型的ItemView

    一般复杂的ListView都会重写BaseAdapter,通过重用convertView来减少inflate,通过setTag()和ViewHolder改变ItemView的内容. 重写BaseAda ...

  6. Android 自定义Adapter实现多视图Item的ListView

    自定义Adapter实现多视图Item的ListView http://www.devdiv.com/adapter_item_listview-blog-20-7539.html 1.原理分析 Ad ...

  7. Android开发之ListView添加多种布局效果演示

    在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断 ...

  8. Android listview与adapter用法

    listview与adapter用法 博客分类: android   一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...

  9. 【转】Android自定义Adapter的ListView的思路及代码

    原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下   在开发中,我们经常使 ...

随机推荐

  1. sublime text全程指南【转载】

    前言(Prologue) Sublime Text是一款跨平台代码编辑器(Code Editor),从最初的Sublime Text 1.0,到现在的Sublime Text 3.0,Sublime ...

  2. CSS fliter

    Filters主要是运用在图片上,以实现一些特效.(也能运用于video上),类似滤镜效果   img {         -webkit-filter:grayscale(1); }      gr ...

  3. SpringMVC知识一锅烩

    Spring简介 SpringMVC和Struts2一样都是属于表现层的框架,将前段发出的请求分发给对应的后端处理器即Controller 处理流程 用户请求被前端控制前拦截,然后根据对应的拦截路径去 ...

  4. 解决Cordova安装Cannot find module 'bplist-parser'问题

    安装完cordova出现找不到必须的模块 出现原因不明,不过如果出现这个问题,我们遇到缺什么模块就安装什么模块就可以了.如图所示

  5. centos7.2构建Python3.5开发环境

    1.本次使用的是一台全新的腾讯云主机,首先获取linux系统版本信息. [root@VM_46_121_centos ~]# cat /etc/redhat-release <本系统默认自带py ...

  6. C#2.0中使用yield关键字简化枚举器的实现

    我们知道要使用foreach语句从客户端代码中调用迭代器,必需实现IEnumerable接口来公开枚举器,IEnumerable是用来公开枚举器的,它并不实现枚举器,要实现枚举器必需实现IEnumer ...

  7. 2017年当下最值得你关注的前端开发框架,不知道你就OUT了!

    近几年随着 jQuery.Ext 以及 CSS3 的发展,以 Bootstrap 为代表的前端开发框架如雨后春笋般挤入视野,可谓应接不暇. 在这篇分享中,我将总结2017年当下最值得你关注的前端开发框 ...

  8. [转载] HBase vs Cassandra:我们迁移系统的原因

    转载自http://www.csdn.net/article/2010-11-29/282698 我的团队近来正在忙于一个全新的产品——即将发布的网络游戏www.FightMyMonster.com. ...

  9. django作业练习

    ---权限管理系统 要求: 1,登陆: a,装饰器判断用户是否已经登陆 b,用户密码使用md5发送 2,注册 a,检测用户是否已经存在,onblur+ajax光标跳出输入框时(使用ajax) 3,注销 ...

  10. jenkins学习之自动打包构建nodejs应用

    上一节记录了下jenkins在centos下的安装,这节继续,说下怎么使用jenkins和nodejs进行自动打包更新服务. 创建任务 创建任务比较简单,这里我们创建自由风格项目: General信息 ...