Android RecyclerView之最基本使用教程完整示例(列表/分隔线/点击事件响应/水波纹特效等实现)

这篇具有很好参考价值的文章主要介绍了Android RecyclerView之最基本使用教程完整示例(列表/分隔线/点击事件响应/水波纹特效等实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面几篇文章我们学了Listview的一些基本使用和面向实用优化性的一些进阶自定义用法。这篇文章开始学习RecyclerView,还是先从一个最简单的示例开始。

本篇文章我们将用RecyclerView实现如下效果图(实现一个带分隔线有点击事件的列表,类似Listview ArrayAdapter的示例)android recyclerview使用,android,RecyclerView,示例,布局,水波纹

 Listview的实现传送门:Android Listview ArrayAdapter示例_左眼看成爱的博客-CSDN博客

前言:

从IDE中我们可以看到,Listview控件已经被谷歌边缘化了。存放在Legacy分类下,legacy在英语中就是过期,遗产的意思。意思是这个控件即将退出历史舞台。

android recyclerview使用,android,RecyclerView,示例,布局,水波纹

两者差别:

相同点:
都可以实现垂直方向的滚动列表效果;
都需要使用适配器(Adapter)
都能自定义适配器实现复杂场景需求

不同点:
ListView只能实现垂直滚动列表,
RecyclerView不但能实现垂直滚动列表还可以实现水平、多列、跨列等复杂的滚动列表;
RecyclerView还可以实现网格、瀑布流等复杂的应用场景布局,且默认强制使用ViewHolder,性能更强;
RecyclerView不但需要自定义Adapter,还必须有LayoutManager,用法更复杂一些。
RecyclerView实现的列表默认没有水波纹变色等点击特效,而Listview则无需任何设置直接就有
ListView有setOnItemClickListener 鼠标点击事件监听接口,而RecyclerView没有。需自己去实现.
RecyclerView可实现复杂的自定义功能,比如动画特效,边框线等。这些都是Listview没有的

总结:
ListView能做到的,RecyclerView都能做到,反之则不行。
RecyclerView用法比ListView更复杂。
一些简单的列表场景没有特殊性能要求。建议使用Listview更简单方便
一些数据量不大的垂直滚动列表也建议使用Listview来实现更方便简单.

示例实现步骤:

1,使用RecylerView需要先导依赖包

implementation 'androidx.recyclerview:recyclerview:1.1.0'

MainActivity代码如下:

package com.example.RecyclerView_BaseTest;

import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final String[] citys = {"上海","北京","天津","江苏","河南","西藏","新疆","湖南","湖北"};

        RecyclerView recyclerView =findViewById(R.id.recyview);

        //设置线性布局LinearLayoutManager,也可以是GridLayoutManager(网格布局),StaggeredGridLayoutManager(瀑布流)
        LinearLayoutManager layoutManager= new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);
        recyclerView.setLayoutManager(layoutManager);
        //recyclerView.setLayoutManager(new LinearLayoutManager(this));

        //设置适配器
        MyAdapter adapter =new MyAdapter(this,citys);
        recyclerView.setAdapter(adapter);

    }
}

item布局:

<?xml version="1.0" encoding="UTF-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/txtcity"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:textColor="#FF00FF"
          android:padding="15dp"
          android:textSize="16sp">
</TextView>

主布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">


    <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
</LinearLayout>

MyAdapter适配器

package com.example.RecyclerView_BaseTest;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

/**
 * @author wh445306
 * @version 1.0
 * @Description MyAdapter for RecyclerView
 * @Date 2023-03-18 15:07
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{

    LayoutInflater mInflater; //声明布局填充器
    String[] list;
    Context context; //声明上下文


    //构造方法
    public MyAdapter(Context context, String[] list) {
        mInflater = LayoutInflater.from(context); //获取布局服务
        this.list=list;
        this.context=context;
    }

    //用于创建ViewHolder实例,并加载Item布局
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = mInflater.inflate( R.layout.list_item, parent, false);
        //View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.list_item, parent, false);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    //用于将获取的数据绑定到对应的控件上
    @Override
    public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, final int position) {
        holder.txt.setText(list[position]);

        //添加点击事件监听
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, list[position], Toast.LENGTH_SHORT).show();
            }
        });
    }


    //获取列表条目的总数
    @Override
    public int getItemCount() {
        return list.length;
    }


    //自定义内部类 ViewHolder
    public static class MyViewHolder extends RecyclerView.ViewHolder{
        TextView txt;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            txt=itemView.findViewById(R.id.txtcity);
        }


    }
}

代码中全部都有注释,且很多地方都有多种实现方法。其中一种注释后保留做为参考。相信一看就明白了。没有过多的内容。只是实现一个简单的垂直列表。如果您想实现其它的效果,可以从MainActivity中修改布局管理器即可实现布局切换:

设置线性布局LinearLayoutManager,
也可以是GridLayoutManager(网格布局),
StaggeredGridLayoutManager(瀑布流)

如何实现示例效果图中的类似Listview的官方默认的框线?:

//设置divider框线
DividerItemDecoration divider=new DividerItemDecoration(this,layoutManager.getOrientation());
recyclerView.addItemDecoration(divider);

参考:
https://blog.csdn.net/minwenping/article/details/76148422

如何实现Listview默认自带的Item点击水波纹变色点击效果呢?,参考这里:

android - RecyclerView facing small Issues - Stack Overflow

android recyclerview使用,android,RecyclerView,示例,布局,水波纹

或者:用一行代码在Android Studio给RecyclerView添加点击效果(水波纹/点击变色)_android recyclerview点击效果_学疯了的博客-CSDN博客 RecyclerView 实现item点击水波纹动画_小蜗牛在漫步的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-720922.html

到了这里,关于Android RecyclerView之最基本使用教程完整示例(列表/分隔线/点击事件响应/水波纹特效等实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Android RecyclerView使用简述

      RecyclerView是Android中非常受欢迎的控件,RecyclerView是官方在Android5.0之后新添加的控件,推出用来替代传统的ListView和GridView列表控件,所以如果你还在使用ListView的话可以替换为RecyclerView了。 文章的功能可以先运行看看效果,APK下载   对于RecyclerView的使用根据实际项目进

    2023年04月08日
    浏览(88)
  • Android 使用 RecyclerView 创建动态列表

    记录一下学习过程,RecyclerView 创建动态列表效果如下: Recyclerview 认识 Recyclerview 库: Recyclerview 指南: RecyclerView 可以显示大型数据集,通过回收有限数量的视图可以有效地滚动这些数据集,同时最大限度减少内存用量。 在实例化 ViewHolder 视图时可以定义单击侦听器。 Recy

    2023年04月27日
    浏览(47)
  • 【Android笔记97】Android之RecyclerView使用GridLayoutManager网格布局

    这篇文章,主要介绍Android之RecyclerView使用GridLayoutManager网格布局。 目录 一、GridLayoutManager网格布局 1.1、功能效果 1.2、案例代码 (1)创建网格布局

    2024年02月15日
    浏览(40)
  • 【Android】BaseQuickAdapter使用(RecyclerView万能适配器)

    RecyclerView是Android用于取代ListView的SDK,它的灵活性和可替代性都比ListView更好,但RecyclerView也存在一些问题: 高度不能自适应、最后一个 Item 显示不全被遮挡等。而无论ListView还是RecyclerView都必不可少地会使用到适配器,其配置比较繁琐。 BaseQuickAdapter 可以对繁琐的适配器进

    2024年02月06日
    浏览(82)
  • mac电脑和安卓手机传输文件- Android File Transfer for mac完整安装-详细使用教程

    在Windows上,我们常常需要用USB数据线将安卓手机连接到电脑上,然后在手机和电脑之间传输各种文件。但是这种方法对Mac电脑就不怎么起作用了。由于OS X系统的特殊性,许多用户都不知道如何顺利地将安卓连接至Mac,更不用说将安卓的数据传输到Mac上了。 macOS不允许您原生

    2024年02月20日
    浏览(73)
  • 如何在 Android 应用中使用 RecyclerView 实现一个列表显示,并实现点击事件?

    首先,需要在项目的 build.gradle 文件中添加 RecyclerView 的依赖: 接下来,在布局文件中添加 RecyclerView: 接着,需要创建一个 Adapter 类,用于将数据绑定到 RecyclerView 上,如下所示: 在 onBindViewHolder() 方法中,我们可以将数据绑定到 ViewHolder 中的视图上。 需要注意的是,在 V

    2024年02月05日
    浏览(52)
  • 【前端Vue】Vue从0基础完整教程第1篇:vue基本概念,vue-cli的使用【附代码文档】

    Vue从0基础到大神学习完整教程完整教程(附代码资料)主要内容讲述:vue基本概念,vue-cli的使用,vue的插值表达式,{{ gaga }},{{ if (obj.age 18 ) { } }},vue指令,综合案例 - 文章标题编辑vue介绍,开发vue的方式,基本使用,如何覆盖webpack配置,目录分析与清理,vue单文件组件的说明,

    2024年03月09日
    浏览(91)
  • Android 连连看基本布局示例

    这是一个基本的 Android 连连看应用程序布局代码示例,其中使用了LinearLayout组件和Button组件。通过在水平和垂直方向上添加按钮,可以创建可玩的连连看游戏。将图形资源文件与此布局结合使用,即可创建完整的应用程序。

    2023年05月25日
    浏览(42)
  • Android入门第64天-MVVM下瀑布流界面的完美实现-使用RecyclerView

            网上充满着不完善的基于RecyclerView的瀑布流实现, 要么 根本是错的、 要么 就是只知其一不知其二、 要么 就是一充诉了一堆无用代码、要么用的是古老的MVC设计模式。         一个真正的、用户体验类似于淘宝、抖音的瀑布流怎么实现目前基本为无解。因为本

    2024年02月02日
    浏览(49)
  • 解决Android中使用RecyclerView滑动时底部item显示不全的问题

    感觉这个bug是不是因人而异啊,找了很多文章都没能解决我的问题,包括在RecyclerView上在嵌套上一层RelativeLayout,添加属性android:descendantFocusability=”blocksDescendants”,使用ConstraintLayout布局包裹RecyclerView,再设置layout_height=\\\"0dp\\\"和layout_constraintBottom_toBottomOf=\\\"parent\\\"(就是指定约束

    2024年02月16日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包