歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 為ListView構造自定義布局

Android 為ListView構造自定義布局

日期:2017/3/1 11:17:17   编辑:Linux編程

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