当前位置:  编程技术>移动开发

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

    来源: 互联网  发布时间:2014-10-18

    本文导语:  大家先看第一个例子显示: 这个界面相信大家都看到过的,这次比上一个例子多的是ListView 的每一项绑定的是不再是单纯的一个字符串了,ListView 的每一个条目我们需要显示两个信息,编号和姓名.可以看到,我们绑定了十...

大家先看第一个例子显示:

这个界面相信大家都看到过的,这次比上一个例子多的是ListView 的每一项绑定的是不再是单纯的一个字符串了,ListView 的每一个条目我们需要显示两个信息,编号和姓名.可以看到,我们绑定了十条数据,用了一个for 循环,每一条绑定的时候创建一个HashMap,然后往里面放数据,放的数据有相对应的key, 即id,name,到时候我们取数据的时候就根据这个key 找到我们放进去的数据,有点类似与键值对的意思,不知道这样解释大家明白不明白。

贴上源代码,然后接下来讲解:

代码如下:

/**  *  
 */ package com.cz.list.demo; 
 import java.util.ArrayList; 
import java.util.HashMap;  
import android.app.Activity; import android.os.Bundle; 
import android.widget.ListView; import android.widget.SimpleAdapter; 
 /** 
 * @author CZ  *  
 */ public class SimpleAdapterListDemo extends Activity { 
    private ListView listView;  
    /*      * (non-Javadoc) 
     *       * @see android.app.Activity#onCreate(android.os.Bundle) 
     */     @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);  
        SimpleAdapter simpleAdapter = new SimpleAdapter(                 SimpleAdapterListDemo.this, getHashMapData(), 
                android.R.layout.simple_list_item_2, new String[] { "id",                         "name" }, new int[] { android.R.id.text1, 
                        android.R.id.text2 });         listView.setAdapter(simpleAdapter); 
    }  
    /**      *  
     * @return Year:2011 Date:2011-10-23 Time:下午05:45:38 Author:CZ TODO      *         写一个方法去绑定十条数据 
     */     private ArrayList getHashMapData() { 
        ArrayList hashData = new ArrayList();         for (int i = 0; i < 10; i++) { 
            HashMap mItem = new HashMap();             mItem.put("id", "当前的id是" + i); 
            mItem.put("name", "名字是美女" + i);             hashData.add(mItem); 
        }         return hashData; 
     } 
}

这个Adapter直接用的是SimpleAdapter,构造函数中有五个参数,可以看下:

android.widget.SimpleAdapter.SimpleAdapter(Context context, List> data, int resource, String[] from, int[] to)

构造函数中有五个参数,

第一个是context引用对象,
第二个参数就是我们要显示的数据集List,
第三个参数是int 类型的,是我们每一条的自定义布局,程序中我们用到的是android中自带的布局,所以用android.R.layout.list_item_2来引用,如果是我们自定义的布局,就直接用R.layout.XX引用就好。
第四个参数跟第五个参数需要一起理解,从字面的意思理解,from to 就是把第四个参数里面的数据显示到第五个参数中。 第二个参数是我们要显示的数据集,每条数据都是用哈希Map 来定义的,里面有定义的作为key 的字段,id,name, 有这样一个映射的关系,第四个参数中的key 值映射到第五个参数中相对应的TextView 上面,那么这些TextView 是从哪里来的,是第三个参数中 布局文件中的TextView,这四个参数中可以这样理解.

希望大家这时候可以理解。

接下来是自定义布局的例子,但是因为我第一次写完提交的时候提示字符超过8万,粘有贴错了东西,让我不禁在心里发下牢骚,编辑器有待提高啊..

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

代码是:

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

代码如下:





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 data; private int layoutResource;
/**
* @param context * @param data
* @param resource * @param from
* @param to 构造函数 */
public CustomSimpleAdapter(Context context, ArrayList 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 getHashMapData() { ArrayList hashData = new ArrayList();
for (int i = 0; i < 10; i++) { HashMap mItem = new HashMap();
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上面.

希望对新手有所帮助..

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • andriod中ListView, listItem布局和convertView的缓存与重用详解
  • java命名空间javax.swing.text.html类listview的类成员方法: listview定义及介绍
  • ScrollView与ListView合用(正确计算Listview的高度)的问题解决
  • java命名空间javax.swing.text.html类listview的类成员方法: setpropertiesfromattributes定义及介绍
  • android ListView的右边滚动滑块启用方法 分享
  • java命名空间javax.swing.text.html类listview的类成员方法: paint定义及介绍
  • android中ListView多次刷新重复执行getView的解决方法
  • java命名空间javax.swing.text.html类listview的类成员方法: paintchild定义及介绍
  • c# ListView实现双击Item事件的变通方法
  • Android Horizontal ListView
  • C# ListView双击Item事件
  • 谁能给我一个minigui中listview的例子?急!!!!
  • android中如果为listview的item添加listener,也能为item中的button添加listener
  • Android笔记之:在ScrollView中嵌套ListView的方法
  • android ListView自动滚动方法
  • 滑动刷新的ListView Android PullToRefresh
  • C# Winform 禁止用户调整ListView的列宽
  • android listview 水平滚动和垂直滚动的小例子
  • C# listview添加combobox到单元格的实现代码
  • 解决EditText、ListView以及GridView同时使用,输入法自动跳出来的方法
  • Android用ListView显示SDCard文件列表的小例子
  • JqueryMobile动态生成listView并实现刷新的两种方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3