Adapter

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

相關文章
相關標籤/搜索