本文主要讲解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. asp.net asp:TextBox控件绑定值后,获取不到新值问题解决方法

    把Page_Load里绑定的代码放在    if(!IsPostBack){}里面后,即可获取到更新的值. 意思为第一次加载执行.

  2. IntelliJ IDEA 比较当前版本文件与历史文件

    前言: 写代码修改后怎样比较与历史文件的区别呢?idea提供了2种比较方式(目前笔者所了解到的) 一.SVN的版本比较 二.当前文件与历史版本比较

  3. 【POJ】【3164】Commond Network

    最小树形图 最小树形图模板题,朱-刘算法. 题解:http://blog.csdn.net/shuangde800/article/details/8039359 这位大神代码写的非常通俗易懂,而且这 ...

  4. httpsClient

    Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且 ...

  5. java 页面换行处理

    在taxtarea中输入的文本.如果含有回车或空格.在界面上显示的时候则不哪么正常.回车消失了,空格变短了. 如何解决这个问题呢.有2种方法. 1.使用<pre>标签 w3c对pre元素是 ...

  6. Unity3D脚本中文系列教程(二)

    原地址:http://dong2008hong.blog.163.com/blog/static/469688272014030347910/ Unity3D脚本中文系列教程(一) .根据名称或标签定 ...

  7. call,apply,bind方法的总结

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...

  8. IOS 中的MVC设计模式

  9. YWE复习

    1.怎样使用C#的[状态栏][StatusStrip]控件 http://jingyan.baidu.com/article/851fbc37e7004e3e1f15ab3d.html 2.toolt ...

  10. StringBuffer的用法

    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...