跳转至

ItemWrapper

Version 1.1.1

ItemWrapper 用于向适配器设置列表项的布局 id 以及设置列表项点击事件。

设置布局 id

直接设置:

Version 1.1.1

你可以在向适配器添加数据项时直接设置对应的布局 id ,例如:

fun addContact(name: String, number: String) {
    val index = itemCount
    mDataSource.add(index, ItemWrapper(Contact(name, number), layoutId = R.layout.item_contact))
    notifyItemChanged(index)
}

点击 ContactAdapter 查看完整示例。

根据条件进行设置:

Version 1.1.1

如果你需要根据不同的数据类型指定不同的布局,你可以在向适配器添加数据项时采取下面的方法:

// 数据项定义
data class Images(...) : ResponseApi {
    data class Image(val type: String, ...) {
        fun getLayoutId() = 
            if (id % 2 == 0) R.layout.item_image_comic else R.layout.item_image_default
    }
}

fun addTypeImage(image: Images.Image) {
    val index = itemCount
    mDataSource.add(index, ItemWrapper(image, layoutId = image.getLayoutId()))
    notifyItemChanged(index)
}

点击 ImageAdapter 查看完整示例。

设置点击事件

通用点击事件

Version 1.1.1

如果你想要为列表项设置通用点击事件,通常只需要进行以下操作:

mImageAdapter.apply {
    setOnItemClickListener { _, pos, _ ->
        showShortMsg("Click event and pos is $pos.")
    }
    setOnItemLongClickListener { _, pos, _ ->
        showShortMsg("Long click event and pos is $pos.")
        true
    }
}

点击 ImageActivity 查看完整示例。

列表项点击事件

Version 1.1.1

列表项点击事件说明

如果你为列表项单独定义了点击事件,那么它不再支持通用点击事件。

你可以借助 ItemWrapper 为不同类型的列表项设置点击事件 ,例如:

// 定义点击事件
private val sampleClick1 = OnItemClickListener<Images.Image> { view, _, _ ->
    MaterialAlertDialogBuilder(view.context).setTitle("这是一个点击事件。").show()
}
private val sampleClick2 = OnItemClickListener<Images.Image> { _, _, _ ->
    getSnackbar().setText("列表项被点击").show()
}

// 根据不同的 index 设置点击事件
if (0 == index % 2) {
    ItemWrapper(image, image.getLayoutId(), sampleClick1)
} else {
    ItemWrapper(image, image.getLayoutId(), sampleClick2)
}

点击 ImageActivity 查看完整示例。

列表项内部控件点击事件

Version 1.1.1

你可以借助 ItemWrapper 为列表项内部的控件添加点击事件,例如:

inline fun addContact(..., scope: ItemWrapper<Contact>.() -> Unit) {
    val index = itemCount
    val wrapper = ItemWrapper(...).also(scope)
    getDataSource().add(index, wrapper)
    notifyItemChanged(index)
}

mAdapter.addContact(...) {
    addOnItemChildClickListener(R.id.name) { _, _, _ ->
        SimpleToast.showShortMsg("名字是 $name")
    }
    addOnItemChildClickListener(R.id.number) { _, _, _ ->
        SimpleToast.showShortMsg("电话号码是 $number")
    }
}

点击 ContactAdapter 查看完整示例。