博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android ListView Adapter的getItemViewType和getViewTypeCount多种布局
阅读量:6345 次
发布时间:2019-06-22

本文共 3351 字,大约阅读时间需要 11 分钟。



《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
> items = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView listView = this.getListView(); BaseAdapter adapter = new MyBaseAdapter(); items = new ArrayList
>(); 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
group_map = new HashMap
(); group_map.put(TYPE, GROUP); group_map.put(DATA, groups[i]); items.add(group_map); for (int j = 0; j < 5; j++) { HashMap
data_map = new HashMap
(); 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
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
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; } }}

你可能感兴趣的文章
Hibernate入门教程
查看>>
Java支付宝扫码支付[新]
查看>>
SpringMVC 拦截器 筛选
查看>>
CronExpression介绍
查看>>
第十八章:MVVM(八)
查看>>
点击表头切换升降序排序方式
查看>>
第26天,Django之include本质
查看>>
Java中静态变量和实例变量的区别
查看>>
秋名山老司机(详解)——bugku
查看>>
RED | Robot Framework集成开发环境
查看>>
育碧同 Mozilla 联手开发 AI 代码助手
查看>>
【实用】面对枯燥的源码,如何才能看得下去?
查看>>
智库说 | 徐远:数字时代的城市潜力
查看>>
《JSP极简教程》jsp c:forEach用法
查看>>
WebSocket详解(六):刨根问底WebSocket与Socket的关系
查看>>
用 Go 写一个轻量级的 ssh 批量操作工具
查看>>
网站设计之合理架构CSS 架构CSS
查看>>
OTP 22.0 RC3 发布,Erlang 编写的应用服务器
查看>>
D语言/DLang 2.085.1 发布,修复性迭代
查看>>
感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?...
查看>>