RecycleView基本使用及常见问题汇总

这篇具有很好参考价值的文章主要介绍了RecycleView基本使用及常见问题汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RecycleView属于android基础组件,比较常用,下面总结下其使用的基础流程及常见问题解决办法(常见问题会定期更新)

基础使用

  • 首先在xml里引入RecycleView
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RecycleTestActivity">
    <SeekBar
        android:id="@+id/sk"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_width="match_parent"
        android:padding="20dp"
        android:layout_height="wrap_content"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_marginTop="50dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
</androidx.constraintlayout.widget.ConstraintLayout>
  • 编写adapter,分以下几步

1.创建自定义adapter类,创建内部类MyViewHolder,并实现RecycleView的ViewHolder,参数传递view

class MyAdapter(val data:List<Int>) {
    class MyHolder(view:View):ViewHolder(view){
        
    }
}
  1. 创建item layout,里面根据需要创建对应的布局,这里假如里面仅有一个progressbar,注意根布局高度改为wrap content,否则的话实际效果每个item占用了一屏
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <ProgressBar
        android:id="@+id/progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

3.在MyHolder里获取到progressBar

class MyAdapter(val data:List<Int>) {
    class MyHolder(view:View):ViewHolder(view){
        val progressBar:ProgressBar = view.findViewById(R.id.progress)
    }
}

4.MyAdapter继承Recycleview.Adapter,并实现对应的三个方法

class MyAdapter(val data:List<Int>):Adapter<MyAdapter.MyHolder>() {
    class MyHolder(view:View):ViewHolder(view){
        val progressBar:ProgressBar = view.findViewById(R.id.progress)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyHolder {
        TODO("Not yet implemented")
    }

    override fun getItemCount(): Int {
        TODO("Not yet implemented")
    }

    override fun onBindViewHolder(holder: MyHolder, position: Int) {
        TODO("Not yet implemented")
    }
}
  1. 在onCreateViewHolder里创建MyHolder并返回,在getItemCount里返回 data.size,在onBindViewHolder里绑定组件
 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.my_item, parent, false)
        return MyHolder(view)
    }

    override fun getItemCount(): Int {
       return data.size
    }

    override fun onBindViewHolder(holder: MyHolder, position: Int) {
        holder.progressBar.progress = data[position]
    }
  1. 在activity里获取recycleView,设置adapter 设置manager,adapter创建时把数据传入
recyclerView = findViewById(R.id.recyclerView)
        myAdapter = MyAdapter(list)
        recyclerView.adapter = myAdapter
        recyclerView.layoutManager = LinearLayoutManager(this)

遇到的问题

1.当item里有progress bar时,数据变化让progress bar进度条变化,此时没什么问题,但如果progress bar设置了自定义的progressDrawable,那么其中一个item的进度条变化就会导致别的item显示的progress进度出现异常

android:progressDrawable="@drawable/progress_bg"

progress_bg文件内容

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--背景色-->
    <item android:id="@+id/background">
        <shape>
            <corners android:radius="100px" />
            <solid android:color="@color/progress_track" />
        </shape>
    </item>

    <!--进度条色-->
    <item android:id="@+id/progress">
        <clip android:clipOrientation="horizontal">
            <shape>
                <corners android:radius="100px" />
                <solid android:color="@color/progress_indicator" />
            </shape>
        </clip>
    </item>
</layer-list>

解决办法:
在onBindViewHolder时调用 holder.ProgressBar.progressDrawable.mutate()文章来源地址https://www.toymoban.com/news/detail-793715.html

  override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.ProgressBar.progressDrawable.mutate()

到了这里,关于RecycleView基本使用及常见问题汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git常见问题汇总

    问题: Your branch is ahead of ‘origin/master’ by 1 commit 原因:你的本地分支高于远程仓库一次提交, 同步更新下,执行命令: 问题: warning: LF will be replaced by CRLF in main.lua The file will have its original line endings in your working directory. 原因:CR代表回车(r) LF代表换行(n),在DosWindows平台下

    2024年02月10日
    浏览(42)
  • 软件平台接口常见问题汇总

    接口常见问题汇总 一、接口技术层面 1、输入参数验证校验不全面。如:      1.1入参数据类型长度边界,范围边界。      1.2 入参数据内容、成员内容,有效无效,合法非法。      1.3 入参数据 特殊字符 敏感字符过滤。      1.4 入参可否必选。 2、接口内部触发的服务相

    2023年04月21日
    浏览(47)
  • 等保2.0常见问题汇总

    等保2.0发布后,整个网络安全行业积极学习并按照新规范进行网络系统的部署。然而许多人仍然对等保制度的来历、发展、演变以及贯彻重点存在疑问。等保2.0依然在整个实施流程上由五个标准环节构成:定级、备案、建设整改、等级测评、监督检查五个方面。本文汇总梳理

    2024年02月04日
    浏览(101)
  • 大数据常见面试问题汇总

    目录 第1章 核心技术 1.1 LinuxShell 1.1.1 Linux常用高级命令 1.1.2 Shell常用工具及写过的脚本 1.1.3 Shell中单引号和双引号区别 1.2 Hadoop 1.2.1 Hadoop常用端口号 1.2.2 HDFS读流程和写流程 1.2.3 HDFS小文件处理 1.2.4 HDFS的NameNode内存 1.2.5 Shuffle及优化 1.2.6 Yarn工作机制 1.2.7 Yarn调度器 1.2.8 HDFS块大

    2024年02月14日
    浏览(101)
  • 毕业设计答辩常见问题汇总

    答:P0口做数据总线用是不需要加上拉电阻,这个书上面有写的,就是8个IO口同时控制输出,比如P0口接1602液晶、12864液晶、数码管的8段段选等等都不需要加上拉电阻,如果做单个的IO口用就要加上拉电阻。 答:这个论文中有的,也都是一些套话。我就不答了,我整理的都是

    2024年02月05日
    浏览(44)
  • FPGA/IC面试常见问题汇总

    参考:数字IC设计工程师笔试面试经典100题_OnePlusZero的博客-CSDN博客_数字ic设计面试题 目录 参考:数字IC设计工程师笔试面试经典100题_OnePlusZero的博客-CSDN博客_数字ic设计面试题 1、同步复位和异步复位的优缺点 2、什么是竞争和冒险,如何消除? 3、什么是同步电路,什么是异

    2024年02月11日
    浏览(44)
  • oracle 19c环境常见问题汇总

    1、rman备份时会消耗这么多临时表空间 参考MOS: RMAN-08132: Warning: Cannot Update Recovery Area ORA-01652: unable to extend temp segment by 64 in tablespace TEMP (Doc ID 2658437.1) Known RMAN Performance Problems (Doc ID 247611.1) 处理办法:备份时,会话级别将optimizer_mode由ALL_ROWS改成RULE RMAN sql \\\"alter session set optimi

    2024年02月12日
    浏览(51)
  • Docker常见问题/面试题汇总和解析

    Docker是一种开源容器平台,可以通过轻量级容器来实现应用程序的打包、发布和部署。 虚拟机使用虚拟化技术来在操作系统上运行多个独立的操作系统。而容器只需要一个共享的操作系统内核即可运行多个隔离的用户空间实例。 Docker 主要由三个组件组成:客户端(Docker Cl

    2024年02月16日
    浏览(44)
  • CAN协议详解+常见问题汇总,吐血整理!!!

    文章分两部分,一是CAN的详解,二是常见问题汇总;文章长,但是都是重点精华,往有帮助~ (参考的是火哥的STM32有关CAN协议的文档) 一、CAN的详解 1. 物理层 CAN总线:成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线。 CAN是异步通讯,只有CAN_High和CAN_Low两条信

    2024年02月08日
    浏览(37)
  • 性能测试工具LR常见问题汇总

    本文是收集整理LR常见的问题,如果你有收集整理常见的问题 本文意义:让所有使用LR的同学,在此处能找到LR日常碰到问题的解决方案。 1 )如果安装 了IE以外的浏览器,并且IE不是默认浏览器,则无法生成录制脚本 2 )如果录制脚本时IE 不能打开,则需要将浏览器的IE工具

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包