Android ListView Adapter的getItemViewType和getViewTypeCount多种布局
《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多种布局的更多相关文章
- Android Listview & Adapter
Listview主要有两个职责: 将数据填充到布局 处理用户的选择点击等操作 列表的显示需要三个元素: ListVeiw 用来展示列表的View 适配器(Adapter) 用来把数据映射到ListVi ...
- Listview多种布局的使用
ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...
- [Android] ListView关于adapter多种view设置
使用的关键点是在adapter覆盖两个方法 public int getItemViewType(int position) public int getViewTypeCount() 其它的可另go ...
- Android之ListView的getItemViewType和getViewTypeCount
PS:感觉这两个方法其实还是很容易理解的,也算是给我其他两个朋友写的吧,帮他们搞清楚这两个方法的用法和概念.同时还有一些小细节问题需要注意. 学习内容: 1.getItemViewType和getVi ...
- Android ListView添加多种类型的ItemView
一般复杂的ListView都会重写BaseAdapter,通过重用convertView来减少inflate,通过setTag()和ViewHolder改变ItemView的内容. 重写BaseAda ...
- Android 自定义Adapter实现多视图Item的ListView
自定义Adapter实现多视图Item的ListView http://www.devdiv.com/adapter_item_listview-blog-20-7539.html 1.原理分析 Ad ...
- Android开发之ListView添加多种布局效果演示
在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断 ...
- Android listview与adapter用法
listview与adapter用法 博客分类: android 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...
- 【转】Android自定义Adapter的ListView的思路及代码
原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下 在开发中,我们经常使 ...
随机推荐
- 详细图解window环境mongodb下载、安装、配置与使用
到官网下载最新版面mongodb安装包,(32位版本的已经取消了,只有64位的) 官网地址: https://www.mongodb.com/download-center#community 下载完 ...
- C#基本功之委托和事件
定义:委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用. 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联 目的:方法声明和方法实现的分离,使得程序更容易扩展 一 ...
- for循环中执行setTimeout问题
代码片段: for(var i=0;i<8;i++){ setTimeout(function () { console.log(i) },0) } 输出了8次8,这跟js的执行顺序和作用域链有 ...
- python 小白(无编程基础,无计算机基础)的开发之路 辅助知识1 with...as
这个语法是用来代替传统的try...finally语法的. with EXPRESSION [ as VARIABLE] WITH-BLOCK 基本思想是with所求值的对象必须有一个__enter_ ...
- [转载] Java中动态加载jar文件和class文件
转载自http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下 ...
- TweenMax动画库学习
之前在做HTML5移动端开发的时候,用的都是Animate.css,这个插件封装的的确很好,但是在做一些缓动方面的动画,它也有一定的不足之处,比如手要写一个连续的动画,需要不停的去重复写函数,使得代码 ...
- Python待分析的模块
fcntl 文件控制模块 http://docs.python.org/2.7/library/fcntl.html#module-fcntl struct 二进制文本处理模块 http://docs ...
- BootStrap的入门和响应式的使用
在做前端开发中,其实有百分之四十的时间用来布局写样式,百分之三十用来写JS逻辑交互,百分之三十时间用来测试调bug,可以看的到的是,用在布局+样式的时候会比较多, 所以会有很多的前端框架诞生,例如bo ...
- Azure 基础 : 使用 Automation 定时开机
不知何时 Azure 为虚机提供了自动关机的功能.这是一个很棒的功能,可以帮助我们定时关闭虚机并释放掉资源以节省开支.如果某台虚机在夜间不需要提供服务,我们就可以把它配置为晚上的某个时间点自动关机: ...
- PendingIntent、Notification常用方法
PendingIntent PendingIntent它的直译是:待处理意图,这样翻译,大家就猜出它的作用是什么了,用于处理一些定义但是不立即使用的意图,最常见的就是用户点击通知,然后跳转指定的页面: ...