紧接上篇:

接下来是自定义布局的例子,我们大家先看下程序出来的效果图:

 

ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定数据(二)_第1张图片

代码是:

1.     首先自定义布局,我们命名一个custom_list_layout.xml的布局文件,代码如下:

 

   
   
   
   
  1. xml version="1.0" encoding="utf-8"?> 
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="fill_parent" android:layout_height="fill_parent"> 
  4.     <ImageView android:id="@+id/p_w_picpathView" android:layout_width="48dip" 
  5.         android:layout_height="48dip" android:scaleType="fitCenter" 
  6.         android:adjustViewBounds="true" android:layout_alignParentLeft="true" 
  7.         android:layout_margin="5dip">ImageView> 
  8.     <TextView android:id="@+id/number" android:layout_width="wrap_content" 
  9.         android:layout_height="wrap_content" android:textSize="14dip" 
  10.         android:layout_toRightOf="@+id/p_w_picpathView" android:layout_alignTop="@+id/p_w_picpathView">TextView> 
  11.     <TextView android:id="@+id/name" android:layout_width="wrap_content" 
  12.         android:layout_height="wrap_content" android:textSize="10dip" 
  13.         android:layout_toRightOf="@+id/p_w_picpathView" android:layout_below="@+id/number">TextView> 
  14. RelativeLayout> 

2.     我们程序中的代码:

 

   
   
   
   
  1. /** 
  2.  *  
  3.  */ 
  4. package com.cz.list.demo; 
  5.  
  6. import java.util.ArrayList; 
  7. import java.util.HashMap; 
  8.  
  9. import android.app.Activity; 
  10. import android.content.Context; 
  11. import android.os.Bundle; 
  12. import android.util.Log; 
  13. import android.view.LayoutInflater; 
  14. import android.view.View; 
  15. import android.view.ViewGroup; 
  16. import android.widget.ImageView; 
  17. import android.widget.ListView; 
  18. import android.widget.SimpleAdapter; 
  19. import android.widget.TextView; 
  20.  
  21. /** 
  22.  * @author CZ 
  23.  *  
  24.  */ 
  25. public class CustomSimpleAdapterDemo extends Activity { 
  26.     private ListView listView; 
  27.  
  28.     @Override 
  29.     protected void onCreate(Bundle savedInstanceState) { 
  30.         // TODO Auto-generated method stub 
  31.         super.onCreate(savedInstanceState); 
  32.         setContentView(R.layout.array_list_layout); 
  33.         listView = (ListView) findViewById(R.id.array_list); 
  34.  
  35.         CustomSimpleAdapter customSimpleAdapter = new CustomSimpleAdapter( 
  36.                 CustomSimpleAdapterDemo.this, getHashMapData(), 
  37.                 R.layout.custom_list_layout); 
  38.  
  39.         listView.setAdapter(customSimpleAdapter); 
  40.     } 
  41.      
  42.     /** 
  43.      *  
  44.      * @author CZ 
  45.      *  自定义的类去继承SimpleAdapter 
  46.      */ 
  47.     private class CustomSimpleAdapter extends SimpleAdapter { 
  48.         private Context context; 
  49.         private ArrayList<HashMap<String, Object>> data; 
  50.         private int layoutResource; 
  51.  
  52.         /** 
  53.          * @param context 
  54.          * @param data 
  55.          * @param resource 
  56.          * @param from 
  57.          * @param to  构造函数 
  58.          */ 
  59.         public CustomSimpleAdapter(Context context, 
  60.                 ArrayList<HashMap<String, Object>> data, int resource) { 
  61.             super(context, data, resource, null, null); 
  62.             this.context = context; 
  63.             this.data = data; 
  64.             this.layoutResource = resource
  65.         } 
  66.  
  67.         class ViewHolder { 
  68.             ImageView picture; 
  69.             TextView number; 
  70.             TextView name; 
  71.         } 
  72.  
  73.         /* 
  74.          * (non-Javadoc) 
  75.          *  
  76.          * @see android.widget.SimpleAdapter#getView(int, android.view.View, 
  77.          * android.view.ViewGroup) 
  78.          */ 
  79.         @Override 
  80.         public View getView(int position, View convertView, ViewGroup parent) { 
  81.             LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
  82.             View layoutView = layoutInflater.inflate(layoutResource, null); 
  83.             ViewHolder viewHolder = new ViewHolder(); 
  84.             viewHolder.picture = (ImageView) layoutView 
  85.                     .findViewById(R.id.p_w_picpathView); 
  86.             viewHolder.number = (TextView) layoutView.findViewById(R.id.number); 
  87.  
  88.             viewHolder.name = (TextView) layoutView.findViewById(R.id.name); 
  89.             viewHolder.picture.setImageResource(Integer.parseInt(data.get( 
  90.                     position).get("p_w_picpathView").toString())); 
  91.             viewHolder.number.setText(data.get(position).get("id").toString()); 
  92.             Log.e("id", data.get(position).get("name").toString()); 
  93.             viewHolder.name.setText(data.get(position).get("name").toString()); 
  94.             return layoutView; 
  95.         } 
  96.     } 
  97.  
  98.     /** 
  99.      *  
  100.      * @return 
  101.      * Year:2011 Date:2011-10-23 Time:下午05:46:45 
  102.      * Author:CZ 
  103.      * TODO  自定义的方法绑定数据,为了避免图片全部都一样,我们让三张图片循环绑定。 
  104.      */ 
  105.     private ArrayList<HashMap<String, Object>> getHashMapData() { 
  106.         ArrayList<HashMap<String, Object>> hashData = new ArrayList<HashMap<String, Object>>(); 
  107.         for (int i = 0; i < 10; i++) { 
  108.             HashMap<String, Object> mItem = new HashMap<String, Object>(); 
  109.             mItem.put("id", "当前的编号是:" + i); 
  110.             mItem.put("name", "名字是美女" + i); 
  111.             switch (i % 3) { 
  112.             case 0: 
  113.                 mItem.put("p_w_picpathView", R.drawable.test1); 
  114.                 break; 
  115.             case 1: 
  116.                 mItem.put("p_w_picpathView", R.drawable.test2); 
  117.                 break; 
  118.             case 2: 
  119.                 mItem.put("p_w_picpathView", R.drawable.test3); 
  120.                 break; 
  121.             default: 
  122.                 mItem.put("p_w_picpathView", R.drawable.test4); 
  123.                 break; 
  124.             } 
  125.             hashData.add(mItem); 
  126.         } 
  127.         return hashData; 
  128.  
  129.     } 
  130.  

有了之前的例子做基础,这时候看起来是不是会清楚一些呢,绑定数据是一样的,只不过是多绑定了图片的数据。

然后我们重写了SimpleAdapter,  构造函数我们自己定义参数,需要说明的是:

1)     getView() 方法返回是的是一个View值,我们绑定完数据之后,把这个View返回

2)     我们自己写的layout,要先通过转化,转化成为一个View, 找到她里面对应的TextView,然后取出List 表中相对应位置的HashMap,取出数据显示到相应的ImageView TextView上面.

希望对新手有所帮助..

让人纠结的编译器啊,我都贴了两遍...