在同一个RecyclerView列表中要展示不同类型的item,也是可以通过这个神器实现的,为了避免有人不看前面,索性附上吧
github地址:https://github.com/CymChad/BaseRecyclerViewAdapterHelper

实现代码如下:
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.baserecyclerviewadapterhelper.R
import com.chad.baserecyclerviewadapterhelper.entity.ClickEntity
import com.chad.baserecyclerviewadapterhelper.utils.Tips
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.listener.OnItemChildClickListener
import com.chad.library.adapter.base.listener.OnItemClickListener
import com.chad.library.adapter.base.viewholder.BaseViewHolder
/**
*
*/
class ItemClickAdapter(data: MutableList<ClickEntity>) : BaseMultiItemQuickAdapter<ClickEntity, BaseViewHolder>(data), OnItemClickListener, OnItemChildClickListener {
override fun convert(helper: BaseViewHolder, item: ClickEntity) {
when (helper.itemViewType) {
ClickEntity.CLICK_ITEM_VIEW -> {
}
ClickEntity.CLICK_ITEM_CHILD_VIEW -> {
}
ClickEntity.LONG_CLICK_ITEM_VIEW -> {
}
ClickEntity.LONG_CLICK_ITEM_CHILD_VIEW -> {
}
ClickEntity.NEST_CLICK_ITEM_CHILD_VIEW -> {
// u can set nestview id
val recyclerView = helper.getView<RecyclerView>(R.id.nest_list)
recyclerView.setHasFixedSize(true)
if (recyclerView.layoutManager == null) {
recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
}
if (recyclerView.adapter == null) {
val nestAdapter = NestAdapter()
nestAdapter.setOnItemClickListener(this)
nestAdapter.setOnItemChildClickListener(this)
recyclerView.adapter = nestAdapter
}
}
else -> {
}
}
}
override fun onItemChildClick(adapter: BaseQuickAdapter<*, *>, view: View, position: Int) {
Tips.show("childView click")
}
override fun onItemClick(adapter: BaseQuickAdapter<*, *>, view: View, position: Int) {
Tips.show("嵌套RecycleView item 收到: 点击了第 $position 一次")
}
init {
addItemType(ClickEntity.CLICK_ITEM_VIEW, R.layout.item_click_view)
addItemType(ClickEntity.CLICK_ITEM_CHILD_VIEW, R.layout.item_click_childview)
addItemType(ClickEntity.LONG_CLICK_ITEM_VIEW, R.layout.item_long_click_view)
addItemType(ClickEntity.LONG_CLICK_ITEM_CHILD_VIEW, R.layout.item_long_click_childview)
addItemType(ClickEntity.NEST_CLICK_ITEM_CHILD_VIEW, R.layout.item_nest_click)
addChildClickViewIds(R.id.btn,
R.id.iv_num_reduce, R.id.iv_num_add,
R.id.item_click)
addChildLongClickViewIds(R.id.iv_num_reduce, R.id.iv_num_add,
R.id.btn)
}
}
class ClickEntity(override var itemType: Int) : MultiItemEntity {
companion object {
const val CLICK_ITEM_VIEW = 1
const val CLICK_ITEM_CHILD_VIEW = 2
const val LONG_CLICK_ITEM_VIEW = 3
const val LONG_CLICK_ITEM_CHILD_VIEW = 4
const val NEST_CLICK_ITEM_CHILD_VIEW = 5
}
}
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.baserecyclerviewadapterhelper.R
import com.chad.baserecyclerviewadapterhelper.adapter.ItemClickAdapter
import com.chad.baserecyclerviewadapterhelper.base.BaseActivity
import com.chad.baserecyclerviewadapterhelper.entity.ClickEntity
import com.chad.baserecyclerviewadapterhelper.utils.Tips
import java.util.*
/**
* @author Allen
*/
class ItemClickActivity : BaseActivity() {
private lateinit var mRecyclerView: RecyclerView
private var adapter: ItemClickAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_universal_recycler)
setBackBtn()
setTitle("ItemClickActivity Activity")
mRecyclerView = findViewById(R.id.rv)
mRecyclerView.layoutManager = LinearLayoutManager(this)
initAdapter()
adapter!!.setOnItemClickListener { _, _, position -> Tips.show("onItemClick $position") }
adapter!!.setOnItemLongClickListener { _, _, position ->
Tips.show("onItemLongClick $position")
true
}
adapter!!.setOnItemChildClickListener { _, _, position -> Tips.show("onItemChildClick $position") }
adapter!!.setOnItemChildLongClickListener { _, _, position ->
Tips.show("onItemChildLongClick $position")
true
}
}
private fun initAdapter() {
val data: MutableList<ClickEntity> = ArrayList()
data.add(ClickEntity(ClickEntity.CLICK_ITEM_VIEW))
data.add(ClickEntity(ClickEntity.CLICK_ITEM_CHILD_VIEW))
data.add(ClickEntity(ClickEntity.LONG_CLICK_ITEM_VIEW))
data.add(ClickEntity(ClickEntity.LONG_CLICK_ITEM_CHILD_VIEW))
data.add(ClickEntity(ClickEntity.NEST_CLICK_ITEM_CHILD_VIEW))
adapter = ItemClickAdapter(data)
adapter!!.animationEnable = true
mRecyclerView.adapter = adapter
}
}
呼呼,建议看我的思维导图然后再看代码哈!!
网友评论