Adapter

Adapter 其实是数据与视图的绑定工具类。


SimpleAdapter

SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便

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中定义的控件id

参数 from:一个被添加到Map上关联每一个项目列名称的列表,数组里面是列名称

参数 to:是一个int数组,数组里面的id是自定义布局中各个控件的id,需要与上面的from对应


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


你可能感兴趣的:(Adapter)