1. 程式人生 > >android studio for android learning (九) android之Adapter用法

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

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<String> adapter = new ArrayAdapter<String>(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<String>(this,android.R.layout.simple_expandable_list_item_1,getData()));
        setContentView(listView);
    }
    private List<String> getData(){
        List<String> data = new ArrayList<String>();
        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<Map<String,Object>> getData(){
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("title","it time to go");
        map.put("img",R.drawable.plane);
        list.add(map);

        map = new HashMap<String,Object>();
        map.put("title","whtch man, you know");
        map.put("img",R.drawable.plane);
        list.add(map);

        map = new HashMap<String ,Object>();
        map.put("title","the game of power");
        map.put("img",R.drawable.plane);
        list.add(map);

        return list;
    }

}

下面是效果圖

這裡寫圖片描述

3.3 一定要以資料庫作為資料來源的時候,才能使用SimpleCursorAdapter。這裡不在舉例說明。

reference: