美文网首页
BRVAH第三方框架(三)

BRVAH第三方框架(三)

作者: jeffrey12138 | 来源:发表于2020-11-19 09:29 被阅读0次

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

截屏2020-11-17 下午4.32.32.png
实现代码如下:
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
    }

}

呼呼,建议看我的思维导图然后再看代码哈!!

相关文章

网友评论

      本文标题:BRVAH第三方框架(三)

      本文链接:https://www.haomeiwen.com/subject/iqtfiktx.html