RecyclerView无限循环

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=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王宁-Android

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值