使用BaseProviderMultiAdapter和BaseItemProvid实现无限循环(2级列表,同时支持纵向RecyclerView和横向RecyclerView无限循环)支持点击button、item、左右滑动无限循环。
LoopTwoLevelFragment类:
package com.example.androidkotlindemo2.recyclerview.demo6 import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearSnapHelper import com.example.androidkotlindemo2.R import com.example.androidkotlindemo2.bean.Loop2Bean import com.example.androidkotlindemo2.bean.LoopSecondBean import com.example.androidkotlindemo2.bean.LoopTwoLevelBean import com.example.androidkotlindemo2.databinding.RecyclerViewLoopFirstMainBinding import com.example.androidkotlindemo2.databinding.RecyclerViewLoopTwoLevelMainBinding import com.example.androidkotlindemo2.recyclerview.provider.Loop2BaseMultiProviderAdapter import com.example.androidkotlindemo2.recyclerview.provider.Loop2Common import com.example.androidkotlindemo2.recyclerview.provider.LoopFirstBaseMultiProviderAdapter import com.example.androidkotlindemo2.utils.LogUtils /** * Author : wn * Email : maoning20080809@163.com * Date : 2024/6/1 10:43 * Description : 使用LoopFirstBaseMultiProviderAdapter实现无限循环(2级列表,纵向RecyclerView和横向RecyclerView无限循环) * 支持点击button、item、左右无限循环 */ class LoopTwoLevelFragment : Fragment() { private lateinit var binding : RecyclerViewLoopTwoLevelMainBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = RecyclerViewLoopTwoLevelMainBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) var adapter = LoopFirstBaseMultiProviderAdapter() var data = getData() adapter.data = data var linearLayoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) var linearSnapHelper = LinearSnapHelper() binding.rvLoopTwoLevelRecyclerView.let { it.adapter = adapter it.layoutManager = linearLayoutManager linearSnapHelper.attachToRecyclerView(it) } adapter.setOnItemClickListener { adapter, view, position -> LogUtils.e(TAG, "1setOnItemClickListener 点击item") } adapter.setOnItemChildClickListener { adapter, view, position -> when(view.id){ R.id.rv_loop2_item_btn -> { LogUtils.e(TAG, "2setOnItemChildClickListener 点击按钮") } R.id.rv_loop2_item_root -> { LogUtils.e(TAG, "2setOnItemChildClickListener 点击item") } } } } private fun getData() : MutableList<LoopTwoLevelBean>{ //1级列表 var list = mutableListOf<LoopTwoLevelBean>() var imgs1 = intArrayOf(R.mipmap.base_banner0, R.mipmap.base_banner1, R.mipmap.base_banner2, R.mipmap.base_banner3, R.mipmap.base_banner4, R.mipmap.base_banner5) var imgs2 = intArrayOf(R.mipmap.demo_fishs, R.mipmap.demo_classics, R.mipmap.demo_pets, R.mipmap.demo_fruits, R.mipmap.demo_farms, R.mipmap.base_banner5) for(i in 0..1){ var loopTwoLevelBean = LoopTwoLevelBean(i, "第${i+1}级标题", Loop2Common.BASE_LOOP_FIRST) //2级列表 var secondList = mutableListOf<LoopSecondBean>() var resultImgs = intArrayOf() resultImgs = if(i == 0){ imgs1 } else { imgs2 } for(j in 0 until imgs1.size){ var loopSecondBean = LoopSecondBean(i, "姓名${i}-${j}", "描述${i}-${j}", "",