源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-11-25 09:16 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定数据
大家先看第一个例子显示: [url=http://files.jb51.net/file_images/article/201306/2013060512020518.png][img]http://files.jb51.net/file_images/article/201306/2013060512020518.png[/img] [/url] 这个界面相信大家都看到过的,这次比上一个例子多的是ListView 的每一项绑定的是不再是单纯的一个字符串了,ListView 的每一个条目我们需要显示两个信息,编号和姓名.可以看到,我们绑定了十条数据,用了一个for 循环,每一条绑定的时候创建一个HashMap,然后往里面放数据,放的数据有相对应的key, 即id,name,到时候我们取数据的时候就根据这个key 找到我们放进去的数据,有点类似与键值对的意思,不知道这样解释大家明白不明白。 贴上源代码,然后接下来讲解:
[url=http://files.jb51.net/file_images/article/201306/2013060512082420.png][img]http://files.jb51.net/file_images/article/201306/2013060512082420.png[/img] [/url] 代码是: 1.     首先自定义布局,我们命名一个custom_list_layout.xml的布局文件,代码如下:
[u]复制代码[/u] 代码如下:
<?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/imageView" 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/imageView" android:layout_alignTop="@+id/imageView"></TextView> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="10dip" android:layout_toRightOf="@+id/imageView" android:layout_below="@+id/number"></TextView> </RelativeLayout>
[b]2. 我们程序中的代码: [/b]
[u]复制代码[/u] 代码如下:
/** * */ 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.imageView); 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("imageView").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("imageView", R.drawable.test1); break; case 1: mItem.put("imageView", R.drawable.test2); break; case 2: mItem.put("imageView", R.drawable.test3); break; default: mItem.put("imageView", R.drawable.test4); break; } hashData.add(mItem); } return hashData; } }
有了之前的例子做基础,这时候看起来是不是会清楚一些呢,绑定数据是一样的,只不过是多绑定了图片的数据。 然后我们重写了SimpleAdapter, 构造函数我们自己定义参数,需要说明的是: 1) getView() 方法返回是的是一个View值,我们绑定完数据之后,把这个View返回 2) 我们自己写的layout,要先通过转化,转化成为一个View, 找到她里面对应的TextView,然后取出List 表中相对应位置的HashMap,取出数据显示到相应的ImageView 和TextView上面. 希望对新手有所帮助..
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部