Adapter 實際上是數據與視圖的綁定工具類。html
SimpleAdapterjava
SimpleAdapter是擴展性最好的適配器,能夠定義各類你想要的佈局,並且使用很方便android
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)數組
參數context:上下文,好比this。關聯SimpleAdapter運行的視圖上下文工具
參數data:Map列表,列表要顯示的數據,這部分須要本身實現,如例子中的getData(),類型要與上面的一致,每條項目要與from中指定條目一致佈局
參數resource:ListView單項佈局文件的Id,這個佈局就是你自定義的佈局了,你想顯示什麼樣子的佈局都在這個佈局中。這個佈局中必須包括了to中定義的控件idthis
參數 from:一個被添加到Map上關聯每個項目列名稱的列表,數組裏面是列名稱spa
參數 to:是一個int數組,數組裏面的id是自定義佈局中各個控件的id,須要與上面的from對應htm
ArrayAdapter繼承
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
ArrayListDemo.this, android.R.layout.simple_list_item_1,
adapterData);
這段代碼是建立一個數組適配器的代碼,裏面有三個參數,第一個參數是上下文,就是當前的Activity, 第二個參數是android sdk中本身內置的一個佈局,它裏面只有一個TextView,這個參數是代表咱們數組中每一條數據的佈局是這個view,就是將每一條數據都顯示在這個view上面;第三個參數就是咱們要顯示的數據。
以上都是靜態的展現list
若是咱們要動態的刷新,或是添加該怎麼辦?
1首先咱們能夠經過定義Button或是menu的形式獲取點擊事件
2 在事件監聽方法裏面處理展現的數據,向Adapter裏面添加數據或是刷新數據
3 在更新完數據後,執行Adapter.notifyDataSetChange(),方法通知數據已經更新
好比ArrayAdapter:
咱們能夠讓adapterData.add("新的數據");arrayAdapter.notifyDataSetChange().
-----------------------------------------------------------------------------------------------------------------------------------------
自定義Adapter
其實咱們能夠繼承ArrayAdapter,來進行一下擴展
1 定義一個類
public class person{
int id,string name;
get/set…..
}
2 自定義一個綁定數據的視圖row_layout
<LinerLayout>
<Textview id="person_id"/>
<Textview id="person_name"/>
</LinerLayout>
3 自定義Adapter 繼承 ArrayAdapter
PersonAdapter Extends ArrayAdapter{
List<Person> mPersonList;
Context mCtx;
public PersonAdapter(List<Person> personList,Context ctx){
super(ctx,R.layout.ray_layout,personList);
this.mPersonList = personList;
this.mCtx = ctx;
}
private static class PersonHolder{
public TextView personIdView;
public TextView personNameView;
}
//下面就是最關鍵的getView方法了
public View getView(int position,View convertView,ViewGroup parent){
View v = convertView;
PersonHolder holder;
if(convertView == null){
holder = new PersonHolder();
LayoutInflater inflater = (LayoutInflater)mCtx.getSystemService(LAYOUT_INFLATER_SERVICE);
v = inflater.inflater(R.layout.row_layout,parent,false);
TextView idView = (TextView) v.findViewById(R.id.person_id);
TextView nameView = (TextView) v.findViewById(R.id.person_name);
holder.personIdView = idView;
holder.personNameView = nameView;
v.setTag(holder);
}else{
holder = (PersonHolder)v.getTag();
}
Person person = mPersonList.get(posion);
holder.personIdView.setText(person.getId().toString());
holder.personNameView.setText(person.getName());
return v;
}
}
4 調用方式
setAdapter(new PersonAdapter(List<Person>,Context));