Android中对于适配器的理解:

android开发中会大量使用到Listview  而 ListView 需要适配器才能使用,不同场合使用不同的适配器。接了下来 浅谈一下三个常用的适配器,概念及其使用方法。

ArrayAdapter(数组适配器) 一般用于显示一行的文本信息,所以比较简单。但是每个列表项只能是TextVIew

ArrayAdapter<String> adapter=new ArrayAdapter<String>(context, resource, textViewResourceId);

上面这行代码用来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来两者的配合工作

context:用来连接上下文,类与类之间的相关联

resources:布局文件ID,用来数据的显示

textViewResourceId:数据源,用来为列表提供数据

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="ArrayAdapter 数组适配器例子" /><ListView android:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="wrap_content"/></LinearLayout>

Activity:

import java.util.ArrayList;import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;public class Demo13Activity extends Activity {private ListView lv;private ArrayList<String> list = new ArrayList<String>();    //声明一个List数组用于存放数据@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);lv = (ListView)findViewById(R.id.listview);ArrayAdapter<String> adapter = new ArrayAdapter<String>(       //ArraryAdapter数组适配器this,android.R.layout.simple_expandable_list_item_1,getData());<span style="white-space:pre">                 </span>      //添加数据lv.setAdapter(adapter);}private ArrayList<String> getData(){list.add("ListView 第一行");list.add("<span style="font-family: Arial, Helvetica, sans-serif;">ListView 第二行</span><span style="font-family: Arial, Helvetica, sans-serif;">");</span>list.add("<span style="font-family: Arial, Helvetica, sans-serif;">ListView 第三行</span><span style="font-family: Arial, Helvetica, sans-serif;">");</span>return list;}
}

SimpleAdapter:扩展性较强的适配器,可以适配我们各种想要的布局,而且方式较为简单。

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

上面这段代码也是用来装配数据的。

context:联系上下文,用来关联simpleAdapter运行的上下文。

data:用来存储数据,比如在getData()中存放的数据,类型要与定义一致,每条项目要与from所指条目一致。

resources:布局文件ID

from:添加到map上相关联,数组里是列名称的含义,通过名称添加数据  (通过to找到空间ID,赋予ID一个from中的名称)

to:数组里的ID是各个空间的ID,需要与from上的名称相对应

如:   map.put("img", R.drawable.e001);   "img"对应着空间中的某个ID,添加drawable文件在该空间中显示
<span style="font-family: Arial, Helvetica, sans-serif;">        map.put("title", "小宗");</span>
        map.put("info", "电台DJ");

例子一:

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal" ><ImageView android:id="@+id/img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="3px"/><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextView android:id="@+id/title"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="16sp"/><TextViewandroid:id="@+id/info"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="10sp"/></LinearLayout></LinearLayout>

Activity文件:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;public class Demo13Activity extends ListActivity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SimpleAdapter adapter = new SimpleAdapter(this, getData(),      //simpleAdapter中对应的五个参数R.layout.main, new String[] { "img", "title", "info" }, //(上下文,数据源,布局文件,)new int[] { R.id.img, R.id.title, R.id.info });setListAdapter(adapter);}private List<Map<String, Object>> getData() {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Map<String, Object> map = new HashMap<String, Object>();map.put("img", R.drawable.e001);map.put("title", "小宗");map.put("info", "电台DJ");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e002);map.put("title", "貂蝉");map.put("info", "四大美女");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e04b);map.put("title", "奶茶");map.put("info", "清纯妹妹");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e04e);map.put("title", "大黄");map.put("info", "是小狗");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e11a);map.put("title", "hello");map.put("info", "every thing");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e11d);map.put("title", "world");map.put("info", "hello world");list.add(map);return list;}
}

例子二:自定义布局,显示网络资源,ViewBinder的使用
由于显示了网络资源,所以要记得在文件清单中添加权限

<pre name="code" class="java"><uses-permission android:name="android.permission.INTERNET"/>

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ListView android:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="wrap_content"></ListView></LinearLayout>

Activity:

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleAdapter.ViewBinder;public class Demo13Activity extends Activity {private ListView lv;private static final String iphoneUrl = "http://www.51aigoo.com/images/20100107/6b21df8c2419480e.jpg";private static final String macbookproUrl = "http://www.esundigi.net/images/goods/20110317/6ece8f319694f0b1.jpg";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.mylist);lv = (ListView)findViewById(R.id.listview);SimpleAdapter adapter = new SimpleAdapter(this, getData(),R.layout.main,new String[] {"img","title","info"},new int[] { R.id.img, R.id.title, R.id.info});//setListAdapter(adapter);adapter.setViewBinder(new MyViewBinder());lv.setAdapter(adapter);}//获取网络图片资源,返回类型是Bitmap,用于设置在ListView中public Bitmap getBitmap(String httpUrl){Bitmap bmp = null;//ListView中获取网络图片try {URL url = new URL(httpUrl);HttpURLConnection conn = (HttpURLConnection)url.openConnection();InputStream is = conn.getInputStream();bmp = BitmapFactory.decodeStream(is);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return bmp;}//ListView上需要显示的数据private List<Map<String, Object>> getData() {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Map<String, Object> map = new HashMap<String, Object>();//设置绑定是数据是图片map.put("img", getBitmap(iphoneUrl));map.put("title", "iphone4");map.put("info", "可远观而买不起嫣");list.add(map);map = new HashMap<String, Object>();map.put("img", getBitmap(macbookproUrl));map.put("title", "Macbook pro");map.put("info", "明年买个玩玩");list.add(map);return list;}
}
//实现ViewBinder接口
class MyViewBinder implements ViewBinder
{/*** view:要板顶数据的视图* data:要绑定到视图的数据* textRepresentation:一个表示所支持数据的安全的字符串,结果是data.toString()或空字符串,但不能是Null* 返回值:如果数据绑定到视图返回真,否则返回假*/@Overridepublic boolean setViewValue(View view, Object data,String textRepresentation) {if((view instanceof ImageView)&(data instanceof Bitmap)){ImageView iv = (ImageView)view;Bitmap bmp = (Bitmap)data;iv.setImageBitmap(bmp);return true;}return false;}}

适配器AdapterView(ArrayAdapter SimpleAdapter BaseAdapter)相关推荐

  1. [安卓开发] 下拉框Spinner与适配器ArrayAdapter/SimpleAdapter的使用

    目录 简单介绍Spinner和Adapter ArrayAdapter实现以对话框形式展示下拉框(纯文字) Simple实现以对话框形式展示下拉框(图片加文字) 简单介绍Spinner和Adapter ...

  2. 纵观Android Adapter适配器。比较三种常用Adapter(SimpleAdapter,ArrayAdapter,BaseAdapter)。

    什么是适配器. 适配器在代码中体现为Adapter类.是连接数据和UI的桥梁. 换句话说将数据 配置 到你想配置的UI上.顾意思名:适配器 至于这个桥梁怎么制造,就看它的缔造者了. 为什么要使用适配器 ...

  3. ArrayAdapter SimpleAdapter

    1.ArrayAdapter   数组适配器     用于简单的文字列表 2.SimpleAdapter 简单适配器      用户条目只有两个控件的列表 3.条目点击事件 ListView 一般用 ...

  4. android 适配器,android arrayadapter 适配器

    今天讲解的知识点是Arrayadapter这个类,这个是一个适配器,它实现的是Adapter接口,和它类似的有simpleadapter和baseadapter,其中simpleadapter这个类, ...

  5. 简易listview与adapter实现列表,ArrayAdapter和BaseAdapter

    item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  6. ListView 和 Adapter 适配器的简单介绍

    文章目录 1.ListView组件 2.Adapter 适配器 3.ArrayAdapter示例 4.SimpleAdapyer 适配器示例 5.BaseAdapter 适配器示例 主要思路: 1.L ...

  7. 安卓开发入门学习笔记

    第一天 1.LinearLayout,线性布局  vertically :垂直,纵向  horizontally:水平,横向 a:方向,默认横向 android:orientation="h ...

  8. 【Mark 】AndroidStudio_移动应用开发

    Content Android开发环境的配置与准备 Android 概述 Android UI 开发 Activity 数据存储 UI进阶 内容提供者 广播接收者 服务 什么是 Android? 安卓 ...

  9. Android ListView示例教程

    We will learn how to create a simple Android ListView and launch a new activity on selecting a singl ...

最新文章

  1. BZOJ——1202: [HNOI2005]狡猾的商人
  2. 冒泡排序java代码_看动画学算法之:排序冒泡排序
  3. java设计模式---三种工厂模式之间的区别
  4. 【Verilog语法】PC-relatve branch 以及 Delay Slot 的含义
  5. 阶段1 语言基础+高级_1-2 -面向对象和封装_18定义一个标准的类
  6. Python多态原理与示例演示
  7. 品质管控计划ppt怎样写_线上求助:怎么写好PPT年终总结和年度计划?
  8. zb如何导出自己画的_如何用Rhino做出融球效果?
  9. 职场奇袭!3分钟完成一天工作
  10. c4d计算机丢失api-ms,遭遇 mssvc.exe svcUpdate.exe IESeven.dll DBSeven.dll病毒第2/3页
  11. SWAT模型在水文水资源、面源污染模拟中的实践技术应用及典型案例分析
  12. linux 16.04系统下载,【ubuntu16.04】ubuntu(乌班图系统)镜像文件下载 v16.04 稳定版本-七喜软件园...
  13. 云端卫士助力运营商实现DDoS安全业务的统一运营
  14. c语言 dfs,DFS(深度优先搜索)
  15. zbrush常用笔刷_Zbrush各笔刷特性
  16. 随机密码生成(Python编程)
  17. 最近在GitHub 超人气的国人项目和公众号
  18. 使用 WebSphere ILOG JRules 开发保险应用系统【六】——同步BOM、Rule项目到teamserver,并部署Rule到bres上
  19. 如何选择适合你的兴趣爱好(四十九),现代舞
  20. 下载tomcat最新版本

热门文章

  1. ubuntu下播放h264,h265文件
  2. 蓝桥杯 杨辉三角(找规律)
  3. C# 使用抽象函数abstract
  4. openssl enc 加解密
  5. 30秒让让你的电脑快一倍 - 计算机基础 - 中国红客联盟 - Powered
  6. debian Squeeze 安装gnome截图软件.
  7. bim计算机考试,2020年BIM等级考试练习题(十四)
  8. 自己动手实现广义逆矩阵求解(2022.5.4)
  9. java水平制表符_java中水平制表符\t的作用
  10. Unity计时器脚本