2种方法实现无限循环
第1种比较复杂,默认就能左右滑动,通过添加、移除view实现。
第2种比较简单,能左右滑动,通过Int.MAX_VALUE、scrollToPosition(Int.MAX_VALUE/2)实现
第1种方法:
package com.example.androidkotlindemo2.recyclerview.demo4 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 androidx.recyclerview.widget.RecyclerView import com.example.androidkotlindemo2.R import com.example.androidkotlindemo2.bean.ItemBean import com.example.androidkotlindemo2.databinding.RecyclerViewDemo4MainBinding /** * Author : wn * Email : maoning20080809@163.com * Date : 2024/5/25 10:30 * Description : RecyclerView无限循环 */ class RecyclerViewDemo4Fragment : Fragment(){ private lateinit var binding : RecyclerViewDemo4MainBinding private var mLinearSnapHelper = LinearSnapHelper() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = RecyclerViewDemo4MainBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) //initData1() initData2() } /** * 注意:RecyclerView的height必须是match_parent,否则不显示 * 显示图片,无限循环,能左右滑动 */ private fun initData2(){ val imageAdapter = ImageAdapter().apply { items = arrayListOf( R.mipmap.base_banner1, R.mipmap.base_banner2, R.mipmap.base_banner3, R.mipmap.base_banner4 ) } ViewPagerSnapHelper().attachToRecyclerView(binding.recyclerView4) binding.recyclerView4.apply { layoutManager = HorizontalLayoutManager() adapter = imageAdapter } } /** * 第一种无限循环,能左右滑动,很简单 */ private fun initData1(){ var list = mutableListOf<ItemBean>() for (i in 0..4){ var itemBean = ItemBean(i, "name${i}") list.add(itemBean) } var adapter = RVDemo41Adapter(requireContext()) adapter.setData(list) binding.recyclerView4.adapter = adapter var linearLayoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false) mLinearSnapHelper.attachToRecyclerView(binding.recyclerView4) binding.recyclerView4.layoutManager = linearLayoutManager //左右滑动无限循环的核心点,定位到中间 binding.recyclerView4.scrollToPosition(Int.MAX_VALUE/2) } }
recycler_view_demo4_main.xml布局:
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width=