緊接上篇:
接下來是自定義布局的例子,我們大家先看下程序出來的效果圖:
?
代碼是:
1.???? 首先自定義布局,我們命名一個custom_list_layout.xml的布局文件,代碼如下:
?
<?xml?version="1.0"?encoding="utf-8"?>?<RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"?????android:layout_width="fill_parent"?android:layout_height="fill_parent">?????<ImageView?android:id="@+id/p_w_picpathView"?android:layout_width="48dip"?????????android:layout_height="48dip"?android:scaleType="fitCenter"?????????android:adjustViewBounds="true"?android:layout_alignParentLeft="true"?????????android:layout_margin="5dip"></ImageView>?????<TextView?android:id="@+id/number"?android:layout_width="wrap_content"?????????android:layout_height="wrap_content"?android:textSize="14dip"?????????android:layout_toRightOf="@+id/p_w_picpathView"?android:layout_alignTop="@+id/p_w_picpathView"></TextView>?????<TextView?android:id="@+id/name"?android:layout_width="wrap_content"?????????android:layout_height="wrap_content"?android:textSize="10dip"?????????android:layout_toRightOf="@+id/p_w_picpathView"?android:layout_below="@+id/number"></TextView>?</RelativeLayout>? 2.???? 我們程序中的代碼:
?
/**??*???*/?package?com.cz.list.demo;??import?java.util.ArrayList;?import?java.util.HashMap;??import?android.app.Activity;?import?android.content.Context;?import?android.os.Bundle;?import?android.util.Log;?import?android.view.LayoutInflater;?import?android.view.View;?import?android.view.ViewGroup;?import?android.widget.ImageView;?import?android.widget.ListView;?import?android.widget.SimpleAdapter;?import?android.widget.TextView;??/**??*?@author?CZ??*???*/?public?class?CustomSimpleAdapterDemo?extends?Activity?{?????private?ListView?listView;??????@Override?????protected?void?onCreate(Bundle?savedInstanceState)?{?????????//?TODO?Auto-generated?method?stub?????????super.onCreate(savedInstanceState);?????????setContentView(R.layout.array_list_layout);?????????listView?=?(ListView)?findViewById(R.id.array_list);??????????CustomSimpleAdapter?customSimpleAdapter?=?new?CustomSimpleAdapter(?????????????????CustomSimpleAdapterDemo.this,?getHashMapData(),?????????????????R.layout.custom_list_layout);??????????listView.setAdapter(customSimpleAdapter);?????}??????????/**??????*???????*?@author?CZ??????*??自定義的類去繼承SimpleAdapter??????*/?????private?class?CustomSimpleAdapter?extends?SimpleAdapter?{?????????private?Context?context;?????????private?ArrayList<HashMap<String,?Object>>?data;?????????private?int?layoutResource;??????????/**??????????*?@param?context??????????*?@param?data??????????*?@param?resource??????????*?@param?from??????????*?@param?to??構造函數??????????*/?????????public?CustomSimpleAdapter(Context?context,?????????????????ArrayList<HashMap<String,?Object>>?data,?int?resource)?{?????????????super(context,?data,?resource,?null,?null);?????????????this.context?=?context;?????????????this.data?=?data;?????????????this.layoutResource?=?resource;?????????}??????????class?ViewHolder?{?????????????ImageView?picture;?????????????TextView?number;?????????????TextView?name;?????????}??????????/*??????????*?(non-Javadoc)??????????*???????????*?@see?android.widget.SimpleAdapter#getView(int,?android.view.View,??????????*?android.view.ViewGroup)??????????*/?????????@Override?????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{?????????????LayoutInflater?layoutInflater?=?(LayoutInflater)?getSystemService(LAYOUT_INFLATER_SERVICE);?????????????View?layoutView?=?layoutInflater.inflate(layoutResource,?null);?????????????ViewHolder?viewHolder?=?new?ViewHolder();?????????????viewHolder.picture?=?(ImageView)?layoutView?????????????????????.findViewById(R.id.p_w_picpathView);?????????????viewHolder.number?=?(TextView)?layoutView.findViewById(R.id.number);??????????????viewHolder.name?=?(TextView)?layoutView.findViewById(R.id.name);?????????????viewHolder.picture.setImageResource(Integer.parseInt(data.get(?????????????????????position).get("p_w_picpathView").toString()));?????????????viewHolder.number.setText(data.get(position).get("id").toString());?????????????Log.e("id",?data.get(position).get("name").toString());?????????????viewHolder.name.setText(data.get(position).get("name").toString());?????????????return?layoutView;?????????}?????}??????/**??????*???????*?@return??????*?Year:2011?Date:2011-10-23?Time:下午05:46:45??????*?Author:CZ??????*?TODO??自定義的方法綁定數據,為了避免圖片全部都一樣,我們讓三張圖片循環綁定。??????*/?????private?ArrayList<HashMap<String,?Object>>?getHashMapData()?{?????????ArrayList<HashMap<String,?Object>>?hashData?=?new?ArrayList<HashMap<String,?Object>>();?????????for?(int?i?=?0;?i?<?10;?i++)?{?????????????HashMap<String,?Object>?mItem?=?new?HashMap<String,?Object>();?????????????mItem.put("id",?"當前的編號是:"?+?i);?????????????mItem.put("name",?"名字是美女"?+?i);?????????????switch?(i?%?3)?{?????????????case?0:?????????????????mItem.put("p_w_picpathView",?R.drawable.test1);?????????????????break;?????????????case?1:?????????????????mItem.put("p_w_picpathView",?R.drawable.test2);?????????????????break;?????????????case?2:?????????????????mItem.put("p_w_picpathView",?R.drawable.test3);?????????????????break;?????????????default:?????????????????mItem.put("p_w_picpathView",?R.drawable.test4);?????????????????break;?????????????}?????????????hashData.add(mItem);?????????}?????????return?hashData;??????}??}? 有了之前的例子做基礎,這時候看起來是不是會清楚一些呢,綁定數據是一樣的,只不過是多綁定了圖片的數據。
然后我們重寫了SimpleAdapter,? 構造函數我們自己定義參數,需要說明的是:
1)???? getView() 方法返回是的是一個View值,我們綁定完數據之后,把這個View返回
2)???? 我們自己寫的layout,要先通過轉化,轉化成為一個View, 找到她里面對應的TextView,然后取出List 表中相對應位置的HashMap,取出數據顯示到相應的ImageView 和TextView上面.
希望對新手有所幫助..
讓人糾結的編譯器啊,我都貼了兩遍...
?
轉載于:https://blog.51cto.com/april19880317/695923
總結
以上是生活随笔為你收集整理的ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定数据(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。