本文主要讲解ArrayAdapter的创建方法,我把ArrayAdapter分为三种:简单的、样式丰富的但内容简单的、内容丰富的。

默认的,ArrayAdapter期望接受的样式文件里只含有一个textview,然后它把接受到的数据toString后(即调用数据对象的toString方法)展示在textview里。

一、简单的。

这样的列表的每一行都只有一行文字。

  1. // 当然listview 也可以是在layout里写好,然后findViewById()获取出来,这样的话后面就不需setContentView(listview);
  2. ListView listview = new ListView(this);
  3. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1);
  4. adapter.add("string1");
  5. adapter.add("haha");
  6. adapter.add("heihei");
  7. listview.setAdapter(adapter);
  8. setContentView(listview);

上面代码中,android.R.layout.simple_expandable_list_item_1是android里已提供的样式,我 们也可换成自己的xml。但是需要注意的是这个xml文件仅能有一个textview。连Layout也不能有。否则会报错:ArrayAdapter requires the resource ID to be a TextView

如layout下有online_user_list_item.xml,它的内容如下:

  1. <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:id="@+id/online_user_list_item_textview" >
  5. </TextView>

则android.R.layout.simple_expandable_list_item_1换成R.layout.online_user_list_item。

如果我们想要使用更复杂一点的layout,而不仅是只有一个textview,那就要用下面这种。

二、样式丰富但内容简单的。

layout下的online_user_list_item.xml内容如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content">
  5. <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"  android:id="@+id/online_user_list_item_textview" android:text="TextView"></TextView>
  6. <Button
  7. android:text="button"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content">
  10. </Button>
  11. </LinearLayout>

里面含有的textview是我们想要展示内容的地方。那么构建ArrayAdapter时,应该这样写:

  1. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.online_user_list_item, R.id.online_user_list_item_textview);

如果我们需要展示的内容是一仅一个textview承载不了的,还需要其它组件,怎么办?我们可以自定义。

三、内容丰富的(自定义ArrayAdapter)。

这就需要写一个类继承自ArrayAdapter并且重写getView方法。上代码:

  1. public class UserListAdapter extends ArrayAdapter<User> {
  2. private int resourceId;
  3. public UserListAdapter(Context context, int textViewResourceId, List<User> objects) {
  4. super(context, textViewResourceId, objects);
  5. this.resourceId = textViewResourceId;
  6. }
  7. @Override
  8. public View getView(int position, View convertView, ViewGroup parent){
  9. User user = getItem(position);
  10. LinearLayout userListItem = new LinearLayout(getContext());
  11. String inflater = Context.LAYOUT_INFLATER_SERVICE;
  12. LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater);
  13. vi.inflate(resourceId, userListItem, true);
  14. TextView tvUsername = (TextView)userListItem.findViewById(R.id.tv_user_list_username);
  15. TextView tvAskedNum = (TextView)userListItem.findViewById(R.id.tv_user_list_askednum);
  16. TextView tvLastMsg = (TextView)userListItem.findViewById(R.id.tv_user_list_lastmsg);
  17. tvUsername.setText(user.getUsername());
  18. tvAskedNum.setText(String.valueOf(user.getAskedNum()));
  19. tvLastMsg.setText(user.getLastMsg());
  20. return userListItem;
  21. }
  22. }

activity里就这样写

  1. List<User> users = new ArrayList<User>();
  2. User user = new User();
  3. user.setAskedNum(8);
  4. user.setLastMsg("hello");
  5. user.setUsername("pxx");
  6. users.add(user);
  7. users.add(user);
  8. users.add(user);
  9. UserListAdapter adapter = new UserListAdapter(this,R.layout.online_user_list_item,users);
  10. listview.setAdapter(adapter);

OK!差不多了。

Android ArrayAdapter 详解的更多相关文章

  1. Android菜单详解(四)——使用上下文菜单ContextMenu

    之前在<Android菜单详解(二)——创建并响应选项菜单>和<Android菜单详解(三)——SubMenu和IconMenu>中详细讲解了选项菜单,子菜单和图标菜单.今天接 ...

  2. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  3. Android进阶(十四)Android Adapter详解

    Android Adapter详解 Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View.因为layout五花八门,很多数据都不能直接绑定上去, ...

  4. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  5. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  6. Android ActionBar详解

    Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar   目录(?)[+]   第4 ...

  7. Android 签名详解

    Android 签名详解 AndroidOPhoneAnt设计模式Eclipse  在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...

  8. Android编译系统详解(一)

    ++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...

  9. Android布局详解之一:FrameLayout

      原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...

随机推荐

  1. php多条件查询

    $sql)"; if(!empty($uid)) { $sql .=" and uid= ".$uid; } if(!empty($time1) && e ...

  2. 给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。

    // ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "stdafx.h ...

  3. C && C++ 内存分配示意图

    <Unix环境系统高级编程>中的C语言内存分布示意图 1.C内存分布 BSS段: 用来存放程序中未初始化的全局变量.BSS是英文Block Started by Symbol的简称.BSS ...

  4. PHP防止SQL注入与几种正则表达式讲解

    注入漏洞代码和分析 代码如下: <?php function customerror($errno, $errstr, $errfile, $errline) {     echo <b& ...

  5. 查看mininet交换机中的流表

    官网文档http://mininet.org/walkthrough/#xterm-display Xterms are also useful for running interactive com ...

  6. 李洪强漫谈iOS开发[C语言-040]-switch case

    李洪强漫谈iOS开发[C语言-039]-switch case 补充:

  7. 李洪强漫谈iOS开发[C语言-008]- C语言重难点

      C语言学习的重难点 写程序的三个境界: 照抄的境界,翻译的境界,创新的境界 1  伪代码: 描述C语言的编程范式 范式: 规范的一种表示 对于C的范式学会的话,C, C++ Java 都会了 2 ...

  8. lintcode :Partition List 链表划分

    题目: 链表划分 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前. 你应该保留两部分内链表节点原有的相对顺序. 样例 给定链表 1->4->3->2-& ...

  9. ubuntu 折腾之路

    aptitude search :search for the lib...and their realtions. apt-get install :install the app apt-get ...

  10. Tomcat集群配置学习篇-----分布式应用

    Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...