本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定 
数据,通过contextView.setTag绑定数据有按钮的ListView。 
系统显示列表(ListView)时,首先会实例化一个适配器,本文将实例化一个自定义的适配器。实现 
自定义适配器,必须手动映射数据,这时就需要重写getView()方法,系统在绘制列表的每一行的时候 
将调用此方法。 
ListView在开始绘制的时候,系统自动调用getCount()函数,根据函数返回值得到ListView的长度, 
然后根据这个长度,调用getView()逐一画出每一行。 
具体使用方法可以参考下面代码,只需记住Android自定义ListView三步骤: 
第一步:准备主布局文件、组件布局文件等 
第二步:获取并整理数据 
第三部:绑定数据,这里我们是通过自己编写Adapter类来完成的 
1.首先新建一个list.XML

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <LinearLayout android:layout_width="match_parent"
  7. android:layout_height="match_parent"
  8. android:orientation="horizontal" android:background="#f1e4f1">
  9. <ImageView
  10. android:id="@+id/image"
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"/>
  13. <TextView
  14. android:id="@+id/title"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:textColor="#666872"/>
  18. <Button
  19. android:id="@+id/view"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:text="详细"/>
  23. </LinearLayout>
  24. <TextView
  25. android:id="@+id/info"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:textColor="#666872"/>
  29. </LinearLayout>

2、新建一个适配器类MyAdspter.java

  1. public class MyAdspter extends BaseAdapter {
  2. private List<Map<String, Object>> data;
  3. private LayoutInflater layoutInflater;
  4. private Context context;
  5. public MyAdspter(Context context,List<Map<String, Object>> data){
  6. this.context=context;
  7. this.data=data;
  8. this.layoutInflater=LayoutInflater.from(context);
  9. }
  10. /**
  11. * 组件集合,对应list.xml中的控件
  12. * @author Administrator
  13. */
  14. public final class Zujian{
  15. public ImageView image;
  16. public TextView title;
  17. public Button view;
  18. public TextView info;
  19. }
  20. @Override
  21. public int getCount() {
  22. return data.size();
  23. }
  24. /**
  25. * 获得某一位置的数据
  26. */
  27. @Override
  28. public Object getItem(int position) {
  29. return data.get(position);
  30. }
  31. /**
  32. * 获得唯一标识
  33. */
  34. @Override
  35. public long getItemId(int position) {
  36. return position;
  37. }
  38. @Override
  39. public View getView(int position, View convertView, ViewGroup parent) {
  40. Zujian zujian=null;
  41. if(convertView==null){
  42. zujian=new Zujian();
  43. //获得组件,实例化组件
  44. convertView=layoutInflater.inflate(R.layout.list, null);
  45. zujian.image=(ImageView)convertView.findViewById(R.id.image);
  46. zujian.title=(TextView)convertView.findViewById(R.id.title);
  47. zujian.view=(Button)convertView.findViewById(R.id.view);
  48. zujian.info=(TextView)convertView.findViewById(R.id.info);
  49. convertView.setTag(zujian);
  50. }else{
  51. zujian=(Zujian)convertView.getTag();
  52. }
  53. //绑定数据
  54. zujian.image.setBackgroundResource((Integer)data.get(position).get("image"));
  55. zujian.title.setText((String)data.get(position).get("title"));
  56. zujian.info.setText((String)data.get(position).get("info"));
  57. return convertView;
  58. }
  59. }

关于上面LayoutInflater的使用:在实际开发种LayoutInflater这个类还是非常有用的。它的作用类似 
于 findViewById(),不同点是LayoutInflater是用来找layout下xml布局文件,并且会实例化!。 
getView()的三个参数:position表示将显示的是第几行,covertView是从布局文件中inflate来的布 
局。我们用LayoutInflater的方法将定义好的list.xml文件提取成View实例用来显示。然后将xml文件 
中的各个组件实例化,这样便可以将数据对应到各个组件上了。但是按钮为了响应点击事件,需要为 
它添加点击监听器,这样就能捕获点击事件。 
3、activity_main.xml中添加ListView控件

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10. <ListView
  11. android:id="@+id/list"
  12. android:layout_width="fill_parent"
  13. android:layout_height="fill_parent"></ListView>
  14. </RelativeLayout>

4、在activity中调用ListView

  1. public class MainActivity extends Activity {
  2. private ListView listView=null;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. listView=(ListView)findViewById(R.id.list);
  8. List<Map<String, Object>> list=getData();
  9. listView.setAdapter(new MyAdspter(this, list));
  10. }
  11. @Override
  12. public boolean onCreateOptionsMenu(Menu menu) {
  13. getMenuInflater().inflate(R.menu.main, menu);
  14. return true;
  15. }
  16. public List<Map<String, Object>> getData(){
  17. List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
  18. for (int i = 0; i < 10; i++) {
  19. Map<String, Object> map=new HashMap<String, Object>();
  20. map.put("image", R.drawable.ic_launcher);
  21. map.put("title", "这是一个标题"+i);
  22. map.put("info", "这是一个详细信息"+i);
  23. list.add(map);
  24. }
  25. return list;
  26. }
  27. }

Android 自定义ListView的更多相关文章

  1. Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表

    本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...

  2. [置顶] android 自定义ListView实现动画特效

    通过自定义ListView实现动画特效,被点击元素A向前移,A之前元素往后移动. 重点在于动画的实现: 具体代码如下: package com.open.widget; import java.uti ...

  3. android自定义listview实现圆角

    在项目中我们会经常遇到这种圆角效果,因为直角的看起来确实不那么雅观,可能大家会想到用图片实现,试想上中下要分别做三张图片,这样既会是自己的项目增大也会增加内存使用量,所以使用shape来实现不失为一种 ...

  4. Android 自定义ListView单击事件失效

    因为自带的listView不能满足项目需求,通过实现自己的Adapter去继承ArrayAdapter 来实现自定义ListView的Item项目. 出现点击ListView的每一项都不会执行setO ...

  5. Android 自定义 ListView 显示网络上 JSON 格式歌曲列表

    本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...

  6. Android 自定义 ListView 上下拉动刷新最新和加载更多

    本文内容 开发环境 演示上下拉动刷新最新和加载更多 ListView 参考资料 本文演示上下拉动,刷新最新和加载更多,这个效果很常见,比如,新闻资讯类 APP,当向下拉动时,加载最新的资讯:向上拉动时 ...

  7. Android 自定义ListView实现底部分页刷新与顶部下拉刷新,androidlistview

    在项目开发中,由于数据过大时,需要进行分页加载或下拉刷新,来缓解一次性加载的过长等待.本篇博文实例讲解通过自定义的ListView实现底部分页加载和顶部下拉刷新的效果. 其效果图: 一.ListVie ...

  8. Android 自定义ListView动态加载数据

    我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分 ...

  9. android——自定义listView

    都知道微信主机面 有个界面会一行一一行的聊天记录,那个效果就可以用listview来实现(当然这只是其中的一种) listView是一种比较常见的组件它用来展示列的view,它是根据数据的长度来显示数 ...

随机推荐

  1. PHP mysql基础操作

    mysql连接操作 //建立连接$con = mysql_connect('localhost', 'root', '123456');//判断是否连接成功if($con){ die('连接失败!'. ...

  2. BICEP单元测试——随机四则运算升级版

    一.测试方法 6个值得测试的具体部位: Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制错误条件发生? ...

  3. PHP AJAX JSONP实现跨域请求使用实例

    在之前我写过“php返回json数据简单实例”,“php返回json数据中文显示的问题”和“在PHP语言中使用JSON和将json还原成数组”.有兴趣的童鞋可以看看 今天我写的是PHP AJAX JS ...

  4. 中國區的代理協議的韓國遊戲廠商PatiGames

    “與阿裏巴巴簽署旗下游戲「突突三國」在中國區的代理協議的韓國遊戲廠商PatiGames決定與阿裏巴巴終止合作.”相信這條前不久報導的新聞,很多人並不陌生,但這背後其實並不像表面那樣簡單.早在今年4月P ...

  5. jsp 页面标签 积累

    http://www.cnblogs.com/xiadongqing/p/5232592.html <%@ taglib %>引入标签库 ========================= ...

  6. JAVA算法

    一.归并排序  归并排序 (merge sort) 是一类与插入排序.交换排序.选择排序不同的另一种排序方法.归并的含义是将两个或两个以上的有序表合并成一个新的有序表.归并排序有多路归并排序.两路归并 ...

  7. iOS UITableViewCell的"滑动出现多个按钮"

    本文授权转载,作者:@夏天是个大人了 前言: 本篇博客其实就是想介绍tableviewcell滑动的一些"事",昨天在逛github的时候看到的还挺有意思的三方库,简单用了一下感觉 ...

  8. Python 代码覆盖率统计工具 coverage.py

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...

  9. BT客户端实现 Peer协议设计

    与peer建立tcp连接后,首先发送handshake消息进行握手 handshake消息格式如下: 一个字节0x19 + 一个字符串'BitTorrent protocol' + 8 byte 保留 ...

  10. ab post 测试 http 和 webservice 接口方法及用例

    1.ab测试简单http请求 ab -n30000 -c1000 "http://10.1.1.21:8080/" 2.ab 测试 http 接口 (POST) ab -n400 ...