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