9.制作List View的节头部

本文介绍如何创建带有节头部的列表,通过自定义列表适配器利用getViewTypeCount()和getItemViewType()方法区分头部和内容行。适配器管理SectionItem数据结构,提供addSection()方法添加节,同时重写areAllItemsEnabled()和isEnabled()确保头部不可交互。
摘要由CSDN通过智能技术生成

9.1 问题

需要创建一个有若干节内容的列表,其中每一节的顶部都有各自的头部。

9.2 解决方案

(API Level 1)
我们可以通过构建自定义列表适配器来实现此效果,此适配器利用了对多种视图类型的支持。适配器依赖getViewTypeCount()和getItemViewType()来确定将多少种视图用作列表中的行。在大多数情况下,如果所有的行类型相同,就忽略上述方法。然而,在此可以使用这些方法回调为头部行和内容行定义独特的类型。

9.3 实现机制

下图显示了带有节头部的示例列表的预览效果。
分节的列表
我们首先在以下代码中定义SectionItem数据结构,用于表示列表中的每一节。此项将保存节标题以及此标题下列出的数据数组子集。
包含每一节数据的结构

public class SectionItem<T> {
    private String mTitle;
    private T[] mItems;

    public SectionItem(String title, T[] items) {
        if (title == null) title = "";

        mTitle = title;
        mItems = items;
    }

    public String getTitle() {
        return mTitle;
    }

    public T getItem(int position) {
        return mItems[position];
    }

    public int getCount() {
        //为节标题包含额外的项
        return (mItems == null ? 1 : 1 + mItems.length);
    }

    @Override
    public boolean equals(Object object) {
        //如果两个节有相同的标题,则它们相等
        if (object != null && object instanceof SectionItem) {
            return ((SectionItem) object).getTitle().equals(mTitle);
        }
        return false;
    }
}

此结构将使列表适配器中的逻辑更易于管理。在以下代码中,我们可以看到提供分节列表视图的适配器。此适配器的任务是将每个节项(包括它们的头部)的位置映射到适配器视图(如ListView)所了解的可见列表的全局位置。
用于显示多个节的ListAdapter

public abstract class SimpleSectionsAdapter<T> extends BaseAdapter implements AdapterView.OnItemClickListener {

    /* 为每个视图类型定义常量 */
    private static final int TYPE_HEADER = 0;
    private static final int TYPE_ITEM = 1;

    private LayoutInflater mLayoutInflater;
    private int mHeaderResource;
    private int mItemResource;

    /* 所有节的唯一聚合*/<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值