歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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的用法就確定好了,接下來給出一段代碼,即上述

  1. public static SimpleAdapter getAdapter(Context c,String[] array_menu_name,int[] array_menu_image){  
  2.         ArrayList<HashMap<String,Object>> list=new ArrayList<HashMap<String,Object>>();  
  3.         for(int i=0;i<array_menu_name.length;i++){  
  4.             HashMap<String,Object> map=new HashMap<String,Object>();  
  5.             map.put("name", array_menu_name[i]);  
  6.             map.put("image", array_menu_image[i]);  
  7.             list.add(map);  
  8.         }  
  9.         SimpleAdapter adapter=new SimpleAdapter(c,list,R.layout.view,new String[]{"image","name"}  
  10.                 ,new int[]{R.id.img,R.id.tx});  
  11.         return adapter;  
  12.     }  

adapter的范例。

Copyright © Linux教程網 All Rights Reserved