LIstView控件
每一个listView控件可以包含很多item(由数据源决定),需要数据适配器将数据源和视图联系起来:1、创建适配器(arrayAdapter——数据源可以是集合和数组, simpleAdapter——数据源是泛型的集合);
2、将数据源加载进适配器(通常在创建的时候就加载了,new)
3、视图加载适配器(listView.setAdapter())
1、创建适配器:
a、arrayAdapter适配器:可以包含制定类型的数据源,如ArrayAdapter<String> arr_adapter等,它的构造函数很多,如ArrayAdapter<String>(Context context, int resource,String[] objects)
其中1、context是上下文,也就是this,2、resource是列表项(每一个item)的布局文件的ID(可以是android自带的,也可以自己写),3、objects则是数据源 (数组,数据源需要自己构造或者数据库中提取,此时也就将数据源加载进了数据库)
b、simpleAdapter适配器:SimpleAdapter sim_adapter=new SimpleAdapter(Context context,List<? extends Map<String, ?>> data, int resource,String[] from, int[] to)
其中1、context也是上下文,2、是数据源:一个由map组成的List集合,如List<Map<String,Object>>,一个map就是一个item,,3、也是列表项的布局文件的ID,4、from记录了Map中的键名(每个map必须包含from中的所有键名),5、绑定map中值所对应的控件ID,与from中的每一项对应。
2、加载数据源到适配器中(创建过程中已经实现,也可以后期修改,添加)
3、视图加载适配器 ListView控件对应的实例化对象.setAdapter(适配器)
到此即可完成ListView的展示。对于每一项被点击后的响应,见“监听器”的使用。
更进一步的合理利用listview
1、将item封装成Itembean,将list<itembean>作为数据源。
2、自己写适配器,继承baseAdapter.
3、关键在geiView的方法中
a、利用本身的参数convertView,在其为空的时候才创建一个view对象,并利用布局容器LayoutInflater对象的inflate()方法将布局文件转换为view对象赋给converView,当期不为空时,直接在converView中使用findviewbyid()方法,避免重复创建view对象
b、因为findviewbyid()也是需要时间,所以可以用一个viewHolder类,将第一次在converView中找到的所有控件保存起来,并利用converView的setTag方法将此iewHolder和converView关联起来。当以后需要操作控件时,直接使用converView的getTag()方法(会返回一个viewHolder类),以此来获得Item中的所有控件。