紧接上篇:

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

 

代码是:

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上面.

希望对新手有所帮助..

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

 

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. Android请求服务器的两种方式--post, get的区别
  4. Android(安卓)如何让悬浮窗口覆盖显示在导航栏之上?
  5. Android使用JSONObject和GSON方法解析JSON格式数据
  6. Android开发实践(一)我的第一个androidApp
  7. Android数据库ContentProvider封装原理
  8. go 1.4支持Android的说明(译文)
  9. 详解 Android(安卓)的 Activity 组件——笔记

随机推荐

  1. Android(安卓)Intent调用大全,Android自带
  2. Android(安卓)studio 继承view 画笔画圆
  3. android中fragment之间传值
  4. Android(安卓)比Timer更好方法
  5. android webview读取本地相册时“Not all
  6. Android(安卓)访问权限许可大全
  7. Android(安卓)O u-blox gps移植
  8. Android-- 输入法键盘控制
  9. Android(安卓)播放音乐的service
  10. Android(安卓)倒计时控件