ListView通用泛型适配器

还记得我们之前说的ListView吗,(这个难用的控件-。+)我们在用他的同时也用到了一个叫做适配器Adapter的东西。一般我们用一个类继承BaseAdapter,来进行数据和控件的适配。
但是我们每一种适配器都只是为了适配一种数据源和一种布局,如果用到的少还好,如果要用到十几种,我们是不是要写十几个适配器呢?这个想法真的是太蠢了!

有一种适配器写法,可以做到一个适配器与多种类型数据和布局进行适配,这个东西叫做通用适配器(因为他是用到泛型实现的,我称他为泛型适配器),今天我们来看一下这种适配器的写法:

在写之前呢,我们首先回忆一下之前所用到的BaseAdapter适配器:

我们通过继承BaseAdapter,实现了他的四个方法:getCount,getPosition,getItem,和getView。其中最难写的就是getView了,

然后我们还对他进行了优化:通过写一个叫做ViewHolder的类,在里面放入对应的控件。

现在我们首先来说一下通用适配器和一般的适配器的区别和相同点:

普通适配器构造方法中传递上下文和源数据

通用适配器中传递条目的布局id和源数据

普通适配器的ViewHolder为成员变量         通用适配器ViewHolder一般写成单例模式
普通适配器在getView中将数据、控件、布局写死

通用适配器在getView中调用实现的抽象方法,以回调的方式实现多类型适配

接下来我们正式来看一下通用适配器的写法:

1.先创建好我们今天需要的控件、源数据以及Bean类。

控件只有一个ListView

<?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"
    tools:context=".activities.MainActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/mlv"/>

</LinearLayout>

beans方法模拟了一个假数据

private void beans() {
    list = new ArrayList<>();
    for (int i = 0; i < 16; i += 4) {
        list.add(new Student("同学" + i, "", 15 + i, R.drawable.a, true));
        list.add(new Student("同学" + (i + 1), "", 15 + i, R.drawable.b, false));
        list.add(new Student("同学" + (i + 2), "", 15 + i, R.drawable.c
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值