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上面.
希望对新手有所帮助..
相关文章
- elasticsearch批量插入数据的时候出现java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection「建
- 数说故事再获IDC认可,入选“数据智能决策”热点技术代表企业
- Thinkphp6学习(9)查询数据表备注名与数据纵向显示
- 客快物流大数据项目(九十九):Clickhouse中update/delete的使用
- 客快物流大数据项目(一百):ClickHouse的使用
- 【Windows 逆向】OD 调试器工具 ( CE 工具通过查找访问的方式找到子弹数据基地址 | 使用 OD 工具附加游戏进程 | 在 OD 工具中查看子弹数据地址 | 推荐 )
- windows下安装并启动hadoop2.7.2详解大数据
- HTable和HTablePool使用注意事项详解大数据
- 使用MapReduce列出工资最高的头三名员工姓名及其工资详解大数据
- 数据使用PHP和MySQL快速精准查找数据(phpmysql选择)
- MySQL查询:使用拼音检索数据(mysql查询拼音)
- MySQL:使用日期时间函数快速处理数据(mysql日期时间函数)
- 科大讯飞在拿大数据做什么生意
- 使用Oracle远程插入数据,实现无需手动操作的数据录入。(oracle远程插入)
- “Linux下捕获数据流量的必备技能:抓包命令”(linux下抓包命令)
- ate 数据清空Mysql数据表:以 Truncate命令为例(mysqltrunc)
- 深入Redis:管理和更新数据(修改redis中的数据)
- 利用IF判断实现MySQL数据查询与处理(mysql中使用if判断)
- C程序员使用MySQL实现数据行更新(c mysql 行更新)
- Oracle写入数据的超时限制(oracle写超时时间)
- MySQL 数据求和操作计算一列数据的总和(mysql一列数据总和)
- 如何有效使用Set结构删除Redis中的数据(set删除redis)
- 使用Oracle存储大量数据的简单方法(oracle中的大字段)
- Oracle中获取前几行数据的技巧(oracle 中取前几行)
- 据实现极速传输Redis通道数据实战(redis通道数)
- BCP大容量数据导入导出工具使用步骤
- Asp.net导出Excel/Csv文本格式数据的方法