1什么是Adapter?

Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(List View,Grid View)等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系:

2.所有的adapter如下所示

比较常用的有 Base Adapter,Impleader,Adapter,Counteradaptation等。

  • BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
  • ArrayAdapter支持泛型操作,最为简单,只能展示一行字。
  • SimpleAdapter有最好的扩充性,可以自定义出各种效果。
  • SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。

如果想得到各个adapter的详细信息可以参考官网教程

3.举例来研究具体的adapter应用

3.1 ArrayAdapter的应用,注意它支持泛型操作,最为简单,只能展示一行字

方法一不用布局文件xml,直接继承ListActivity

package com.dragon.testevent;import android.app.ListActivity;import android.os.Bundle;import android.widget.ArrayAdapter;public class MainActivity extends ListActivity {    @Override    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        String[] strs = {"A","B","C","D","E","F","G"};        //ArrayAdapter有三个参数,第一是对象,第二是List的格式,第三个是List的内容        //android.R.layout.simple_list_item_1  自带布局,还有android.R.layout.simple_list_item_multiple_choice, android.R.layout.simple_list_item_checked,android.R.layout.simple_list_item_single_choice等        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,strs);        setListAdapter(adapter);//将当前显示到listView中    }}

效果图

方法2:继承Activity,ListActivity和普通的Activity相比,ListView做了许多显示方面的优化,其它一样

package com.dragon.testevent;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;import java.util.ArrayList;import java.util.List;public class MainActivity extends Activity {    private ListView listView;    @Override    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        listView = new ListView(this);        listView.setAdapter(new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,getData()));        setContentView(listView);    }    private List getData(){        List data = new ArrayList();        data.add("what's wrong?");        data.add("let me know.");        data.add("why not?");        data.add("you are right.");        return data;    }}

大家可以对比上面两种方式有什么不一样,下面是效果图

3.2 simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView,还可以放上Button,CheckBox等等。下面的代码都直接继承了ListActivity

下面是activity_main.xml的代码。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:orientation="vertical"    android:gravity="center_horizontal"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.dragon.testevent.MainActivity">    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/img"        android:layout_margin="5dp"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/title"        android:textColor="#ffffff"        android:textSize="20sp"/>LinearLayout>

对应的java代码

package com.dragon.testevent;import android.app.ListActivity;import android.os.Bundle;import android.widget.SimpleAdapter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends ListActivity {    @Override    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.activity_main,new String[]{"title","img"},new int[] {R.id.title,R.id.img});        setListAdapter(adapter);    }    private List> getData(){        List> list = new ArrayList>();        Map map = new HashMap();        map.put("title","it time to go");        map.put("img",R.drawable.plane);        list.add(map);        map = new HashMap();        map.put("title","whtch man, you know");        map.put("img",R.drawable.plane);        list.add(map);        map = new HashMap();        map.put("title","the game of power");        map.put("img",R.drawable.plane);        list.add(map);        return list;    }}

下面是效果图

3.3 一定要以数据库作为数据源的时候,才能使用SimpleCursorAdapter。这里不在举例说明。

reference:

1. http://www.cnblogs.com/devinzhang/archive/2012/01/20/2328334.html

更多相关文章

  1. Android中SlidingDrawer介绍【安卓进化三十四】
  2. AsyncTask实例代码演示Android异步任务
  3. Android中String资源文件的String.format方法(java)
  4. Android简明开发教程九:创建应用程序框架
  5. 面试题
  6. 查看Sqlite 数据库
  7. 《第一行代码——Android》
  8. 第二章:根据oschina开源的app代码快速构建自己站点的ANDROID APP
  9. Android(安卓)的源代码结构

随机推荐

  1. Android(安卓)"多方向"抽屉
  2. React Native 中文版(含最新Android章节)
  3. 关于Android(安卓)设置监听的的四种方式
  4. Android(安卓)Camera预览
  5. Android开发指南(37) —— Data Backup
  6. 整理出15个Android很有用的代码片段
  7. setBackground和setBackgroundDrawable的
  8. [Android] 提高ORMLite插入大量数据效率
  9. Android的service相关讲解
  10. Android中使用log4j