android studio for android learning (九) android之Adapter用法
阿新 • • 發佈:2019-01-23
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;
}
}