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

本文共 3439 字,大约阅读时间需要 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<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; } } }

你可能感兴趣的文章
Linux makefile 教程 很具体,且易懂
查看>>
VS10x CodeMap 注册码 key VS插件CodeMap
查看>>
JavaScript作用域原理(一)——作用域链
查看>>
linux下MySQL 5.6源码安装
查看>>
matlab三维画图
查看>>
安卓窗口动画修改制作心得
查看>>
CocoaPods的install和update卡在“Anylyzing dependencies”的问题解决方式[效率]
查看>>
【原】为DevExpress的ChartControl添加Y轴控制 和 GridControl中指定列添加超级链接
查看>>
监听手机录音
查看>>
AsyncTask的用法
查看>>
Unity3d Shader
查看>>
Web--CSS控制页面(link与import方式区别)
查看>>
Swagger-UI 基于REST的API测试/文档类插件
查看>>
git squash 和 git rebase
查看>>
使用Cyclone IV控制DDR2
查看>>
[Spring MVC] - 地址路由使用(一)
查看>>
线程互斥与析构函数中mutex的销毁
查看>>
[Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.7
查看>>
复习下C 链表操作(单向链表)
查看>>
栈结构的经典算法题
查看>>