zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

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

数据 使用 自定义 布局 绑定 listview Adapter
2023-06-13 09:15:00 时间
大家先看第一个例子显示:

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

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

复制代码代码如下:

/** *  
 */packagecom.cz.list.demo; 
 importjava.util.ArrayList; 
importjava.util.HashMap;  
importandroid.app.Activity;importandroid.os.Bundle; 
importandroid.widget.ListView;importandroid.widget.SimpleAdapter; 
 /** 
 *@authorCZ *  
 */publicclassSimpleAdapterListDemoextendsActivity{ 
   privateListViewlistView;  
   /*     *(non-Javadoc) 
    *      *@seeandroid.app.Activity#onCreate(android.os.Bundle) 
    */    @Override 
   protectedvoidonCreate(BundlesavedInstanceState){        //TODOAuto-generatedmethodstub 
       super.onCreate(savedInstanceState);        setContentView(R.layout.array_list_layout); 
       listView=(ListView)findViewById(R.id.array_list);  
       SimpleAdaptersimpleAdapter=newSimpleAdapter(                SimpleAdapterListDemo.this,getHashMapData(), 
               android.R.layout.simple_list_item_2,newString[]{"id",                        "name"},newint[]{android.R.id.text1, 
                       android.R.id.text2});        listView.setAdapter(simpleAdapter); 
   }  
   /**     *  
    *@returnYear:2011Date:2011-10-23Time:下午05:45:38Author:CZTODO     *        写一个方法去绑定十条数据 
    */    privateArrayList<HashMap<String,Object>>getHashMapData(){ 
       ArrayList<HashMap<String,Object>>hashData=newArrayList<HashMap<String,Object>>();        for(inti=0;i<10;i++){ 
           HashMap<String,Object>mItem=newHashMap<String,Object>();            mItem.put("id","当前的id是"+i); 
           mItem.put("name","名字是美女"+i);            hashData.add(mItem); 
       }        returnhashData; 
    } 
}

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

android.widget.SimpleAdapter.SimpleAdapter(Contextcontext,List<?extendsMap<String,?>>data,intresource,String[]from,int[]to)

构造函数中有五个参数,

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

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

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

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

代码是:

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

复制代码代码如下:


<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid: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><TextViewandroid: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>
<TextViewandroid: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>


2.我们程序中的代码:

复制代码代码如下:
/***
*/packagecom.cz.list.demo;
importjava.util.ArrayList;
importjava.util.HashMap;
importandroid.app.Activity;importandroid.content.Context;
importandroid.os.Bundle;importandroid.util.Log;
importandroid.view.LayoutInflater;importandroid.view.View;
importandroid.view.ViewGroup;importandroid.widget.ImageView;
importandroid.widget.ListView;importandroid.widget.SimpleAdapter;
importandroid.widget.TextView;
/***@authorCZ
**/
publicclassCustomSimpleAdapterDemoextendsActivity{privateListViewlistView;
@Override
protectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstub
super.onCreate(savedInstanceState);setContentView(R.layout.array_list_layout);
listView=(ListView)findViewById(R.id.array_list);
CustomSimpleAdaptercustomSimpleAdapter=newCustomSimpleAdapter(CustomSimpleAdapterDemo.this,getHashMapData(),
R.layout.custom_list_layout);
listView.setAdapter(customSimpleAdapter);}
/**
**@authorCZ
*自定义的类去继承SimpleAdapter*/
privateclassCustomSimpleAdapterextendsSimpleAdapter{privateContextcontext;
privateArrayList<HashMap<String,Object>>data;privateintlayoutResource;
/**
*@paramcontext*@paramdata
*@paramresource*@paramfrom
*@paramto构造函数*/
publicCustomSimpleAdapter(Contextcontext,ArrayList<HashMap<String,Object>>data,intresource){
super(context,data,resource,null,null);this.context=context;
this.data=data;this.layoutResource=resource;
}
classViewHolder{ImageViewpicture;
TextViewnumber;TextViewname;
}
/**(non-Javadoc)
**@seeandroid.widget.SimpleAdapter#getView(int,android.view.View,
*android.view.ViewGroup)*/
@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){
LayoutInflaterlayoutInflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);ViewlayoutView=layoutInflater.inflate(layoutResource,null);
ViewHolderviewHolder=newViewHolder();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());returnlayoutView;
}}
/**
**@return
*Year:2011Date:2011-10-23Time:下午05:46:45*Author:CZ
*TODO自定义的方法绑定数据,为了避免图片全部都一样,我们让三张图片循环绑定。*/
privateArrayList<HashMap<String,Object>>getHashMapData(){ArrayList<HashMap<String,Object>>hashData=newArrayList<HashMap<String,Object>>();
for(inti=0;i<10;i++){HashMap<String,Object>mItem=newHashMap<String,Object>();
mItem.put("id","当前的编号是:"+i);mItem.put("name","名字是美女"+i);
switch(i%3){case0:
mItem.put("imageView",R.drawable.test1);break;
case1:mItem.put("imageView",R.drawable.test2);
break;case2:
mItem.put("imageView",R.drawable.test3);break;
default:mItem.put("imageView",R.drawable.test4);
break;}
hashData.add(mItem);}
returnhashData;
}
}


有了之前的例子做基础,这时候看起来是不是会清楚一些呢,绑定数据是一样的,只不过是多绑定了图片的数据。

然后我们重写了SimpleAdapter,构造函数我们自己定义参数,需要说明的是:

1)getView()方法返回是的是一个View值,我们绑定完数据之后,把这个View返回

2)我们自己写的layout,要先通过转化,转化成为一个View,找到她里面对应的TextView,然后取出List表中相对应位置的HashMap,取出数据显示到相应的ImageView和TextView上面.

希望对新手有所帮助..