android studio for android learning (九) android之Adapter用法

1什么是Adapter?

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

android studio for android learning (九) android之Adapter用法_第1张图片

2.所有的adapter如下所示

android studio for android learning (九) android之Adapter用法_第2张图片

比较常用的有 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中
    }
}

效果图

android studio for android learning (九) android之Adapter用法_第3张图片

方法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;
    }

}

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

android studio for android learning (九) android之Adapter用法_第4张图片

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

下面是activity_main.xml的代码。


<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;
    }

}

下面是效果图

android studio for android learning (九) android之Adapter用法_第5张图片

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

reference:

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

你可能感兴趣的:(android)