• ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定数据(二)


    紧接上篇:

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

     

    代码是:

    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/imageView" 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/imageView" android:layout_alignTop="@+id/imageView"></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/imageView" 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.imageView); 
    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("imageView").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("imageView", R.drawable.test1); 
    114.                 break; 
    115.             case 1: 
    116.                 mItem.put("imageView", R.drawable.test2); 
    117.                 break; 
    118.             case 2: 
    119.                 mItem.put("imageView", R.drawable.test3); 
    120.                 break; 
    121.             default: 
    122.                 mItem.put("imageView", 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上面.

    希望对新手有所帮助..

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

     

    本文出自 “生如夏花” 博客,请务必保留此出处http://april19880317.blog.51cto.com/1938095/695923

  • 相关阅读:
    QButtonGroup按钮组
    命令链接按钮QCommandLinkButton
    Arduino-常用指令
    第十章第三节 物体的浮沉条件及应用
    安装包制作工具 SetupFactory使用1 详解
    ONVIF、RTSP/RTP、FFMPEG的开发实录
    ffmpeg摄像头采集h264编码RTP发送
    ffmpeg综合应用示例(一)——摄像头直播
    利用ffmpeg一步一步编程实现摄像头采集编码推流直播系统
    ffmpeg超详细综合教程——摄像头直播
  • 原文地址:https://www.cnblogs.com/bmate/p/2352503.html
Copyright © 2020-2023  润新知