Android 为ListView构造自定义布局
Android 提供的ListView默认只有简单的一列,而我在程序开发中,经常会遇到的问题是,希望ListView能尽量多展示一些信息给我们的用户。所以,需要为ListView去自定义布局,例如,分为多列显示,即生成一张数据表,这些在使用数据库的时候是很有必要的。
当我们使用数据库时,通过查询,返回一个cursor对象,它指向了符合条件的第一条数据,我们可以利用Cursor来生成一个SimpleCursoradapter对象,它的构造器参数有(context c,Cursor cursor,int id,int[ ] from ,int[ ] to); 一个adapter(适配器)决定了ListView展示的信息,包括了它的布局,决定ListView以何种形式展现的参数就是 id ,from,to这3个参数,前者提供了布局文件的位置,from 给出了需要从cursor中取出的字段(文本),to则指向了地址为id的布局文件中的TextView组建序列,这样,ListView一条记录的布局,就是XML文件中定义好的布局,每一个字段的风格,可在XML中的TextView去定义了。
并且,我们可以看到,simpleCursorAdapter继承自simpleadapter,这个父类也包含了自定义的功能,它的构造器包含的参数有(context c,List<?> list,int id ,int [ ] from,int [ ] to);显然它的用法和子类是类似的,唯一的不同是数据源的不同,即它的数据来自一个list<HashMap<>>(),此list对象和cursor是比较类似的,我们将在HashMap中去产生一些键值对,并且每一个HashMap中都包含一条类似数据库的记录,同时,外围的List持有了这些记录,这样这个adapter的用法就确定好了,接下来给出一段代码,即上述
- public static SimpleAdapter getAdapter(Context c,String[] array_menu_name,int[] array_menu_image){
- ArrayList<HashMap<String,Object>> list=new ArrayList<HashMap<String,Object>>();
- for(int i=0;i<array_menu_name.length;i++){
- HashMap<String,Object> map=new HashMap<String,Object>();
- map.put("name", array_menu_name[i]);
- map.put("image", array_menu_image[i]);
- list.add(map);
- }
- SimpleAdapter adapter=new SimpleAdapter(c,list,R.layout.view,new String[]{"image","name"}
- ,new int[]{R.id.img,R.id.tx});
- return adapter;
- }
adapter的范例。