ListView之适配器的使用,包含了ArrayAdapter,SimpleAdapter ,BaseAdapter等适配器。
1:ArrayAdapter
- /****
- *
- *
- * ArrayAdapter
- * @author Administrator
- *
- */
- public class ArrayAdapterActivity extends Activity {
- private ListView mListView;
- //定义一个String数组,数组里的数据就是ListView里的一项
- String[] arrayDate={"笑傲江湖","风清扬","令狐冲","岳不群","乔峰","虚竹","段誉","中神通","东邪","西毒","南帝","北丐"};
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_arrayadapter);
- initView();
- }
- private void initView() {
- mListView=(ListView)findViewById(R.id.listView1);
- //新建一个数组适配器ArrayAdapter绑定数据,参数(当前的Activity,布局文件,数据源)
- //android.R.layout.simple_list_item_1 本身自带布局
- ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,arrayDate);
- //视图(ListView)加载适配器
- mListView.setAdapter(adapter);
- mListView.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public voidonItemClick(AdapterView<?> parent, View view,
- int position,long id) {
- Toast.makeText(ArrayAdapterActivity.this,arrayDate[position],1).show();
- }
- });
- }
- }
预览效果:
2:SimpleAdapter
使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。
归纳步骤:
1、准备数据源:指定由Map组成的List数据源
2、新建适配器,设置键值名和对应控件id,绑定数据
3、视图加载适配器
参数:
new SimpleAdapter(context, data, resource, from, to)
context ------SimpleAdapter关联的View的运行环境
data ---------一个Map组成的List。在列表中的每个条目对应列表中的一行,每一个map中应该包含所有在from参数中指定的键
resource ------ 一个定义列表项的布局文件的资源ID。布局文件将至少应包含那些在to中定义了的ID
from ---------- 一个将被添加到Map映射上的键名
to -------------将绑定数据的视图的ID,跟from参数对应
代码:
- /****
- *
- *
- * SimpleAdapter
- *
- * @author Administrator
- *
- */
- public class SimpleAdapterActivity extends Activity {
- private ListView mshow_list;
- String[] name = { "张三","李四","小星星","静静","明明","小张" };
- int[] img = {R.drawable.a2, R.drawable.a3,R.drawable.a4, R.drawable.a5,R.drawable.a6,R.drawable.ic_launcher};
- protected void onCreate(android.os.Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- //加载布局文件
- setContentView(R.layout.activity_simpleadapter);
- //2.获取listview控件的对象
- mshow_list=(ListView)findViewById(R.id.show_listview);
- /**
- * 第四步:定义SimpleAdapter(并加载对应item布局文件,获得对应的keY,获得对应item布局文件中的组件的id
- *
- * 第二个参数data:数据源
- * 第三个参数resource :listView每个item对应的布局文件
- * 第四个参数 from:
- * 第五个参数to:
- *new String[]{对应的key}v
- */
- SimpleAdapter simpleAdapter=new SimpleAdapter(this, get_data(),
- R.layout.item_simple,new String[]{
- "type","age","img"},newint[]{R.id.type_txt,R.id.age_txt,R.id.img});
- //第五步:通过setAdapter将适配器绑定到listView控件
- mshow_list.setAdapter(simpleAdapter);
- };
- /***
- * 数据源
- *
- *
- */
- private ArrayList<Map<String, Object>> get_data() {
- // 定义一个ArrayList的集合(集合中又封装一个map类型的集合)
- ArrayList<Map<String, Object>>data_list = new ArrayList<Map<String,Object>>();
- for (int i = 0; i<name.length; i++) {
- // key,value intstring map不能new map
- Map<String, Object> data_map = newHashMap<String, Object>();
- data_map.put("type", name[i]);
- data_map.put("age", i + 10+"岁");
- data_map.put("img", img[i]);
- // 将map集合添加(封装)到ArrayList集合中
- data_list.add(data_map);
- }
- // 返回ArrayList集合
- returndata_list;
- }
- }
预览效果:
3:BaseAdapter
步骤
使用BaseAdapter实现复杂的ListView的步骤:
1 首先准备好需要显示在LiseView中的数据 ——List
2 然后编写2 个XML 文件 第一个文件是ListView控件所在的布局文件 第二个文件是ListVIew中每一个item的布局文件
3 创建一个继承自BaseAdapter的类
4 为ListView绑定适配器 setAdapter(继承BaseAdapter 类的实例)
5 用传统方式来覆写适配器的getView函数和getCount 函数(从参数convertView里映射布局文件,find各个控件填充数据)
6 加入ViewHolder类(定义n个控件的声明)用convertView.setTag(viewHolder)在View和Object之间关联,此目的是节省find多次的时间。
代码:
Activity.java
- /***
- *
- *
- * BaseAdapter
- * @author Administrator
- *
- */
- public class BaseAdapterActivity extends Activity {
- private ListView mbaseshow_listview;
- private String[] arrayDate={"东方不败","天龙八部","九阴真经","东邪","南帝","北丐"};
- private int[] img = {R.drawable.l2, R.drawable.l3,R.drawable.l1, R.drawable.a5,R.drawable.a6,R.drawable.ic_launcher};
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODOAuto-generated method stub
- super.onCreate(savedInstanceState);
- // 加载布局
- setContentView(R.layout.baselistview_layout);
- mbaseshow_listview =(ListView) findViewById(R.id.baseshow_listview);
- initView();
- }
- private void initView() {
- // TODOAuto-generated method stub
- MyAdapter myAdapter = new MyAdapter(this,arrayDate,img);
- //绑定适配器
- mbaseshow_listview.setAdapter(myAdapter);
- //刷新适配器
- myAdapter.notifyDataSetChanged();
- /**ListView的item点击事件
- *
- *
- *AdapterView<?> arg0:适配器
- *View arg1:表示当前item的view(视图),通过它可以获取该item中的各个组件
- *position:当前item的id,
- *arg3:表示当前的item在listview中相对位置
- *
- *
- **/
- mbaseshow_listview.setOnItemClickListener(newOnItemClickListener() {
- @Override
- public voidonItemClick(AdapterView<?> arg0, View arg1, int position,
- long arg3) {
- Toast.makeText(BaseAdapterActivity.this,"你点击了"+arrayDate[position],-1000).show();
- }
- });
- mbaseshow_listview.setOnItemLongClickListener(newOnItemLongClickListener() {
- @Override
- public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
- int position,long arg3) {
- Toast.makeText(BaseAdapterActivity.this,"执行了长按事件",0 ).show();
- return false;
- }
- });
- }
- BaseAdapter.java
- public class MyAdapter extends BaseAdapter {
- private String[] datas;
- private LayoutInflater inflater;
- private int[] imgs;
- public MyAdapter(Contextcotext, String[] datas,int[] imgs) {
- this.datas = datas;
- inflater =LayoutInflater.from(cotext);
- this.imgs=imgs;
- }
- /**
- *
- * 返回的item总数量
- *
- */
- public intgetCount() {
- return datas.length;
- }
- /**
- *
- * item的位置
- *
- */
- @Override
- public Object getItem(int position){
- // TODOAuto-generated method stub
- return datas[position];
- }
- /**
- *
- * 对应每个item里面控件的id
- *
- */
- @Override
- public longgetItemId(int position) {
- // TODOAuto-generated method stub
- return position;
- }
- @Override
- public View getView(int position,View convertView, ViewGroup parent) {
- ViewHolde viewHolde = null;
- if (null ==convertView) {
- // 实例化 ViewHolde对象
- viewHolde = newViewHolde();
- convertView = inflater.inflate(
- R.layout.item_listview,null);
- viewHolde.img=(ImageView)convertView.findViewById(R.id.img);
- viewHolde.mtype_txt =(TextView) convertView
- .findViewById(R.id.text);
- convertView.setTag(viewHolde);
- }
- else {
- viewHolde = (ViewHolde)convertView.getTag();
- }
- viewHolde.mtype_txt.setText(datas[position]);
- viewHolde.img.setImageResource(imgs[position]);
- // 返回item视图
- returnconvertView;
- }
- class ViewHolde {
- TextView mtype_txt;
- ImageView img;
- }
- }
预览效果:
相关推荐
"android之listview万能适配器"概念旨在创建一个通用、灵活的适配器,能够适应各种不同的数据结构和界面需求。以下将详细解析这个主题。 1. **适配器的作用**: - 适配器是`ListView`与数据模型之间的桥梁,它将...
在android 开发中ListView是比较常用的组件,它以列表的像是展示具体的内容,并且能够根据数据的长度自适应显示.其中适配ListView的方式也有很多种,整理了一下作为初学者的listview中适配器的使用。
"Android ListView 万能适配器"是解决ListView数据绑定的一种高效、灵活的方法,它能够适应多种类型的数据,使得开发者无需为每种不同的数据类型创建单独的Adapter。在本项目中,我们探讨的是一个名为"baseAdapter-...
"android打造listview通用适配器"这个主题旨在解决这个问题,通过创建一个可复用的适配器模板,减少代码冗余,提高代码的可维护性和效率。 首先,我们要理解Adapter的作用。Adapter是ListView与数据源之间的桥梁,...
在Android开发中,ListView是展示大量数据常用的组件之一。它具有高效的滚动性能,可以通过复用View来节省内存。为了使ListView能够正确显示各种不同的数据,我们需要编写一个适配器(Adapter)。本文将深入探讨如何...
本篇文章将深入探讨Android中的BaseAdapter,它是ListView适配器的基础实现,适用于自定义复杂的列表视图。 一、BaseAdapter简介 BaseAdapter是Android提供的一个抽象类,它是所有ListView适配器的基础。开发者可以...
在Android开发中,ListView是广泛使用的控件,用于展示大量数据列表。为了使ListView能够灵活地显示...通过以上步骤,我们可以创建一个适应性强、可复用的ListView适配器,满足各种需求,提高代码的可维护性和效率。
在这个"ListView之自定义适配器Demo"中,我们将探讨如何使用自定义适配器来实现特定的UI布局和交互功能,包括点击事件处理以及内容展示。 首先,我们要了解ListView的工作原理。ListView通过Adapter来与数据源进行...
综上,万能的ViewHolder适配器是为了优化ListView性能和提高代码复用性而设计的一种解决方案,而AdapterUtils工具类则是为了简化适配器的实现和提高开发效率。理解并熟练运用这些技术,可以有效地提升Android应用的...
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表。适配器(Adapter)是连接ListView与数据源的关键...通过实践,你会对ListView适配器有更深的认识,掌握如何将数据高效地展示在ListView上。
本压缩包“listview适配器 ListViewAdapter和ViewHolder代码.rar”提供了一个简单的使用示例,帮助开发者理解和应用这两个概念。 ListViewAdapter是Android中一个专门用于ListView的适配器类,它充当了数据源和...
为了提高代码的复用性和可维护性,开发者通常会创建一个"万能适配器"(Universal Adapter),来适应各种不同类型的ListView需求。这个适配器的设计目标是简化数据绑定和视图更新的过程,使得在处理多种数据源时,只...
listView无需适配器添加数据(写demo快速开发)entries属性的特殊用法,更多请查看我的博客:http://blog.csdn.net/xiayiye5/article/details/78789251
直接两个listView 布局文件,数据直接输入,获得 嵌套ListView 的适配效果
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常配合适配器(Adapter)使用。本示例“android listView 适配器demo”将详细讲解如何利用适配器机制来动态填充ListView的数据。 首先...
本教程将深入讲解如何使用ListView,结合自定义适配器以及解决Out-Of-Memory(OOM)问题。 首先,`ListView`是一个可滚动的视图,它能够显示一行行的数据。它通过Adapter来获取数据并将其渲染为可视化的列表项。...
通过使用ListView万能适配器,我们可以轻松地实现不同的ListView布局,并且可以极大地提高ListView的性能。 本文主要介绍了xamarin Android 实现ListView万能适配器的相关知识点,包括ViewHolder的实现、泛型...
本文将深入探讨如何通过适配器(Adapter)和自定义布局来实现一个功能丰富的自定义ListView。 一、适配器(Adapter)的理解与应用 适配器是Android中连接数据源和UI控件的关键桥梁,它将数据转换成可以被ListView...
在ListView和GridView中,我们通常使用BaseAdapter作为自定义适配器的基础类。BaseAdapter提供了一些基本的方法,如`getCount()`、`getItem()`、`getItemId()`和`getView()`,我们需要重写这些方法来实现自定义的...
总之,ListView适配器是Android开发中的核心组件之一,通过适配器我们可以轻松地将数据展示为可交互的列表。理解和熟练掌握ListView的适配器以及item事件处理,对于提升Android应用的用户体验至关重要。在实际项目中...