Android UI入门(第二篇:ListView控件的使用)

ListView是什么

ListView是一个列表控件,一般我们显示一个列表类型的数据的时候使用,比如我们想展示用户列表,类似坐标事用户头像,右边是用户名称的列表。运行效果 效果大概是下面这样。


用户列表界面

来我们看看要如何实现这个页面吧。

第一步,先创建我们要使用的数据

首先我们看到了这个页面显示的是用户列表。但是具体显示什么内容呢?其实ListView是不知道的,那么我们就应该告诉ListView,我们想显示的数据是什么。正如我们从图中看到的一样,包含了多个用户的信息,那么我们就需要创建一个用户的集合来保存这些信息。至于如何保存这些信息呢?是List?Map?或者数组?因为保存数据用哪个其实都是可以的,但是有一点需要注意就是这个列表是有序的,就是通过索引可以获取到这个元素。那么这里Map就非常不适合。但是不代表Map不能使用,只是就算使用了也非常麻烦,所以跟不能使用没啥区别。但是List或者数组都可以,而且使用起来几乎没什么区别。在正常的项目开发中一般会使用List。这是因为相对于数组List有很多有点,比如List是可变长的,而数组不是。所以这里建议大家使用List。下面使用List创建一个用户列表。代码如下

//创建一个用户的list
  List<UserBean> userList = new ArrayList<UserBean>();
        for (int i = 0; i < 5; i++) {
            UserBean user = new UserBean();
            user.setName("name:" + i );
            userList.add(user);
        }

那么如何使用ListView呢

其实跟我们使用TextView差不多。只是ListView需要一个适配器。
这里我们新建一个自定义适配器。看看代码如何写,然后后面会继续讲如何自定义适配器

  ListView lv_user_list = (ListView) findViewById(R.id.lv_user_list);
  lv_user_list.setAdapter(adapter);

大家可以看到ListView 获取过程跟TextView是一样的。
取得ListView 对象之后需要位ListView 设置一个适配器。
这里adapter就是我设置的适配器,下面讲一下适配器是如何创建的

第二步,使用适配器Adapter

Adapter我们一般叫适配器,又是一个抽象的概念。这里先不纠结什么是适配器。先看看我们如何使用吧。使用适配器有两种方式第一种是直接new一个系统实现的适配器。但是这样做有个问题就是系统实现的效果,跟我想要的一般情况下是不一样的。所以大多时候我们都是自己去实现一个适配,也就是下面说的自定义适配器。

自定义适配器

自定义适配器也非常简单。
根据名字我们大概能知道作用了,适配器就是适配数据上面的userList和ListView的工具。
也就是说数据和View是通过适配器建立起来的联系。
那么适配器就需要传人一个list使用,这里传人一个Context,是因为android很多地方都会用到,现在先不用管这个Context是什么东西,以后学到的时候自然会慢慢说。
自定义Adapter的实现就是 创建一个类继承BaseAdapter。这个类是系统实现的,我们只需要继承就好。如何传人数据呢,可以使用构造方法。或者别的方式,这里暂时使用构造方法去做。

public class UserListAdapter extends BaseAdapter { 
    List<UserBean> userList;
    Context mContext;

    public UserListAdapter(Context context, List<UserBean> userList) {
        this.mContext = context;
        this.userList = userList;
    }
}

这个类大概这么写就好了。
但是这么写会报错 要实现这个类的虚拟方法。这里先直接给出实现吧


public class UserListAdapter extends BaseAdapter {

   List<UserBean> userList;
   Context mContext;

   public UserListAdapter(Context context, List<UserBean> userList) {
       this.mContext = context;
       this.userList = userList;
   }

   @Override
   public int getCount() {
       return userList.size();
   }

   @Override
   public Object getItem(int position) {
       return userList.get(position);
   }

   @Override
   public long getItemId(int position) {
       return position;
   }

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {

       if (convertView == null) {
           convertView = LayoutInflater.from(mContext).inflate(R.layout.item_user, null);
       }
       String userName = userList.get(position).getName();
       TextView tv_name = (TextView) convertView.findViewById(R.id.tv_name);
       tv_name.setText(userName);
       return convertView;
   }
}

这里引用了一个布局文件就是我们显示的每一行的布局
这个代码先写个测试的吧

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="10dp"
    tools:context="com.iscoding.demo.list.MainActivity">


    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:src="@mipmap/ic_launcher_round" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginLeft="10dp"
        android:gravity="center_vertical"
        android:text="text" />
</LinearLayout>

然后这个Adapter就实现了
这里还有几个点写的不够详细,时间不够了。
有时间我补上。
这样一个列表就能运行起来了。其实还是比较简单的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容