-
Adapter接口派生了ListAdapter和SpinnerAdapter接口,ListAdapter为AbsListView提供列表项,SpinnerAdapter为AbsSpinner提供列表项,Adapter常用的实现类如下:
-
ArrayAdapter:将数组活列表中的多个值包装成列表项,每个列表项只能是TextView或者其子类
ArrayAdapter String []arr={"悟空","八戒","牛魔王"}; //第二个参数必须是TextView或者其子类的资源Id ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.array_item,arr); ListView list=(ListView)findViewById(R.id.list); list.setAdapter(adapter);
-
SimpleAdapter:可将list集合中的多个对象包装成列表项,每个列表项对应一个Layout
SimpleAdapter String []names=new String[]{"虎头","弄玉","李清照","李白"}; String []descs=new String[]{"good boy","good girl","bad boy","bad girl"}; List<Map<String,Object>>listItems=new ArrayList<Map<String,Object>>(); for(int i=0;i<names.length;i++) { Map<String, Object> listItem = new HashMap<String, Object>(); listItem.put("header",R.drawable.ic_launcher); listItem.put("personName", names[i]); listItem.put("desc", descs[i]); listItems.add(listItem); } //map的key与控件id对应 SimpleAdapter simpleAdapter=new SimpleAdapter(this,listItems,R.layout.simple_item,new String[]{"header","personName","desc"}, new int[]{R.id.header,R.id.name,R.id.desc}); ListView list1=(ListView)findViewById(R.id.list1); list1.setAdapter(simpleAdapter);
-
SimpleCursorAdapter:用于包装Cursor提供的数据,其构造函数为
public SimpleAdapter(Context context, List<? extends Map<String,?>> data, int resource, String[] from, int[] to)
SimpleCursorAdapterString[] fromColumns = new String[] {People.NUMBER, People.NAME}; int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView}; SimpleCursorAdapter myAdapter = new SimpleCursorAdapter(this,R.layout.simplecursorlayout,cursor,fromColumns,toLayoutIDs); myListView.setAdapter(myAdapter);
-
BaseAdapter:常用来扩展,可以实现对列表项最大限度的定制.自定义BaseAdapter时要重写它的多个方法,比较重要的有getCount,getView方法.ListView设置了BaseAdapter,系统开始绘制ListView的时候,首先调用getCount方法得到ListView的item数目,然后调用getView逐条绘制item
-
View getView(int position,View convertView,ViewGroup parent):显示data set position位置的数据的view.其中convertView参数需要注意。它的工作原理是:以ListView为例,当初始显示时,每次显示一个item都调用一次getView方法,每次调用convertView都为空,当显示完后,如果屏幕移动了并且导致有些Item移出屏幕,此时如果还有新的item需要产生,调用getView时convertView参数就不为空,而是移出屏幕的item的view,所以为了提高效率可以重用之前的view,代码如下
BaseAdapter getView @Override public View getView(int position, View convertView, ViewGroup parent) { Cache cache; if(null==convertView) { cache=new Cache(); convertView=LayoutInflater.from(mContext).inflate(R.layout.textview, null); cache.textView=(TextView)convertView.findViewById(R.id.textview); convertView.setTag(cache); } else { //复用old view cache=(Cache)convertView.getTag(); } cache.textView.setText("position: "+position); return convertView; } //用于缓存item的所有view,不用重复创建 class Cache { public TextView textView; }
-
View getView(int position,View convertView,ViewGroup parent):显示data set position位置的数据的view.其中convertView参数需要注意。它的工作原理是:以ListView为例,当初始显示时,每次显示一个item都调用一次getView方法,每次调用convertView都为空,当显示完后,如果屏幕移动了并且导致有些Item移出屏幕,此时如果还有新的item需要产生,调用getView时convertView参数就不为空,而是移出屏幕的item的view,所以为了提高效率可以重用之前的view,代码如下
-
继承关系如图所示:
-
ArrayAdapter:将数组活列表中的多个值包装成列表项,每个列表项只能是TextView或者其子类
相关文章: