ListView 主要负责以列表的形式显示数据,并根据需要从Adapter中获取列表项;
Adapter主要负责获取数据,并将数据加工为列表项制定的表现形式,供listView提取数据,并将数据加工为listView指定的表现形式, ArrayAdapter simpleAdapter BaseAdapter:BaseAdapter是最基础的适配器,是抽象类,在使用时,开发人员手动创建其子类;//todopublic View getView(int position,View convertView,ViewGroup parent){ //获取显示列表项对象,在该方法中应该完成数据获取,创建列表项对象,设置列表项中需要显示的数据等操作//自定义类继承BaseAdapter,baseAdapter在工作时需要数据源,可以通过带参数的构造方法实现:public class ContactsAdapter extends BaseAdapter{ private List<Contact>mContactsData;public ContactsAdapter(List<Contact>contact){ this.mContactsData=contacts;}}} baseAdapter的优化1.convertView的重用根据系统会重复利用getView()方法中的convertView对象的特征,getView()方法的返回值应该是convertView对象,否则,系统在每次任意一条列表项时都需要重新创建convertView对象,资源浪费。*View类提供了如下方法:1.public void setTag(final Object tag)2.public Object getTag()*根据以上方法,可以自定义一个类,用于封装conVertView中的各个控件的引用。并通过getTag()
方法提取出来,就可以避免反复调用findViewbyID()造成系统资源浪费*数据源的排序器接口compatatorprivate class NameComprarator implements Comparator<String>{ @ovrridepublic int compata(String 1hs,String rhs){ return 1hs.comparaTo(rhs);}}data=getData();Collections.sort(data,new NameComparator());实时更新ListView的数据显示
*调用Adapter定义的notifyDataSetChanged()方法即可通知更新,切ListView会更新显示》*该方法更新UI,so just do it in MainThread. 注(当配对的List集合被赋值给另一个List集合,则更新无效)Collections.sort()方法排序后,原List集合则根据Comparator实现的规则进行了排序,eg:data.remove()/add()adapter.notifyDataSetChanged();*****************************************有效data=new ArrayList<String>();adapter.notifyDatasetChanged();*****************************************无效