Recyclerview基础+接口点击事件+多布局+随机值瀑布流

简述RecyclerView实现瀑布流并且随机自适应item的高度 我们常见的显示数据的控件listview,下面我简述 一下RecyclerView的使用及简单的现实数据 首先在activity_main.xml中 <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout 阅读详情

Recyclerview基础

RecyclerView比ListView的优势:
1.RecyclerView比ListView实现的效果更多
2.RecyclerView支持多布局
3.RecyclerView根据项目需要插拔功能
RecyclerView默认不支持点击事件->程序员代码中通过回调接口的方式添加监听

一.效果:线性/网络/瀑布流

在这里插入图片描述

二.重要的方法

1.RecyclerView横向滑动;
LinearLayoutManager.HORIZONTAL横向滑动LinearLayoutManager.VERTICAL垂直滑动
2.RecyclerView.Adapter中刷新方法区别:
notifyDataSetChanged();整体刷新+没有动画效果
notifyItemInserted(int position,Object data);有动画效果+添加一条数据在position位置
notifyItemRemoved(position);有动画效果+删除一条数据并刷新
注意:当添加和删除的时候,要更新下标,不然有错位现象
在这里插入图片描述
3.RecyclerView多布局展示:

public int getItemViewType(int position)返回当前数据的itemView类型

4.RecyclerView常见方法:
LinearLayoutManager:recyclerview线性管理器(垂直水平方向);
GridLayoutManager;网络布局管理器;
StaggeredGridLayoutManager:瀑布流布局管理器;
RecyclerView.setLayoutManager(LayoutManager manager);添加布局管理器
RecyclerView.addItemDecoration(ItemDecoration decoration);添加分割线
RecyclerView.setItemAnimator(ItemAnimator animator);添加动画方法
RecyclerView.setAdapter(Adapter adapter);添加适配器

三.RecyclerView的使用

1.gradle中导入Recyclerview引用;
implementation 'com.android.support:recyclerview-v7:28.0.0‘自己搜索导入
2.适配器:
(1).RecyclerView.adapter<泛型>重写3个方法
			onCreateViewHolder:创建viewHolder
			onBindViewHolder:绑定数据
			getItemCount
(2)RecyclerView.ViewHolder

四.代码

(1).布局activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/main_RV"/>
</LinearLayout>

(2).Java代码:MainActivity.java

public class MainActivity extends AppCompatActivity implements MainAdapter.MainItemClickLisener{
    private RecyclerView rv;//控件
    private ArrayList<Student> list=new ArrayList<>();//数据源
    private MainAdapter mainAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv=findViewById(R.id.rv);
        list.add(new Student("A",R.drawable.f1));
        list.add(new Student("A",R.drawable.f2));
        list.add(new Student("A",R.drawable.f3));
        list.add(new Student("A",R.drawable.f4));
        list.add(new Student("A",R.drawable.image1));
        mainAdapter=new MainAdapter(list,this);
        //TODO 1:设置布局管理器
        //线性布局
        final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        //网格布局
        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
        //瀑布流布局:一般和图片结合使用,自适应图片的高度
        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        rv.setLayoutManager(linearLayoutManager);
        //TODO 2:设置分割线
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);
        rv.addItemDecoration(dividerItemDecoration);
        //TODO 3:设置动画
        DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();
        defaultItemAnimator.setRemoveDuration(2000);//设置延迟2秒删除的效果
        defaultItemAnimator.setAddDuration(2000);
        rv.setItemAnimator(defaultItemAnimator);
         //TODO 4:设置点击事件
        mainAdapter.setOnItemClickListener(this);
        rv.setAdapter(mainAdapter);
    }
    @Override
    public void ItemClick(int position){
                    //删除数据
                 list.remove(i);
                 notifyItemRemoved(i);//具有动画效果+删除数据
                 //产生删除错位现象----->重新整理item的下表
                 notifyItemRangeChanged(0,list.size());//从0开始整理list集合的长度个
    }
}

(3).适配器代码:MainAdapter.java

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {
    private ArrayList<Student> list;
    private Context context;
    public MainAdapter(ArrayList<Student> list, Context context) {
        this.list = list;
        this.context = context;
    }
    //TODO 3:创建ViewHolder
    @NonNull
    @Override
    public MainViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
     View view = LayoutInflater.from(context).inflate(R.layout.item_main, null);
        return new MainViewHolder(view);
    }
    //TODO 4:绑定每条数据:填充数据
    @Override
    public void onBindViewHolder(@NonNull MainViewHolder mainViewHolder, final int i) {
        mainViewHolder.iv_pic.setImageResource(list.get(i).getPicId());
        mainViewHolder.tv_name.setText(list.get(i).getName()+"");
        //给item设置点击事件
        mainViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                Toast.makeText(context, ""+i, Toast.LENGTH_SHORT).show();
//                //删除数据
//                list.remove(i);
//                notifyItemRemoved(i);//具有动画效果+删除数据
//                //产生删除错位现象----->重新整理item的下表
//                notifyItemRangeChanged(0,list.size());//从0开始整理list集合的长度个
    //不要在这里做处理,采用接口回调
                lisener.ItemClick(i);
            }
        });
    }
    //TODO 2:返回集合的个数
    @Override
    public int getItemCount() {
        return list.size();
    }
    //TODO 1:自定义ViewHolder类
    class MainViewHolder extends RecyclerView.ViewHolder{
        private ImageView iv_pic;//默认值是null
        private TextView tv_name;
        public MainViewHolder(@NonNull View itemView) {
            super(itemView);
            this.iv_pic=itemView.findViewById(R.id.iv_pic);
            this.tv_name=itemView.findViewById(R.id.tv_name);
        }
    }
    //监听器
    private MainItemClickLisener lisener;
    //设置监听方法:将摄像头安装在31206
    public void setOnItemClickListener(MainItemClickLisener listener){
            this.lisener=listener;
    }
    //定义监听的接口:摄像头
    interface MainItemClickLisener{
        //一有动静就会调用该方法
        public void ItemClick(int position);
    }
}

五.实现多布局只给出适配器代码:微信通讯录页面

/**
RecyclerView.ViewHolder:由于进行多布局操作
需要多个ViewHolder对象对应过个xml布局
自定义ViewHolder父类
*/

public class SecondAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
 private List<PhoneBean>list = new ArrayList<>();
public void refresh(List<PhoneBean>list){
        this.list.addAll(list);
        notifyDataSetChanged();
    }
    //根据list中按position获取的type值返回
    //返回数据以参数的是形式onCreateViewHolder第二参数
    @Override
    public int getItemViewType(int position) {
        return list.get(position).type;
    }
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
                                                      int i) {
        View view = null;
        LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
        if (i==0){
             view = inflater.inflate(R.layout.item_title,viewGroup,false);
             return new TitleViewHolder(view);
        }else {
             view = inflater.inflate(R.layout.item_values,viewGroup,false);
             return new PhoneViewHolder(view);
        }
    }
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        if (list.get(i).type==0){
            //首字母
            TitleViewHolder vh = (TitleViewHolder) viewHolder;
            vh.mTitle.setText(list.get(i).title);
        }else {
            //联系人详情
            PhoneViewHolder vh = (PhoneViewHolder) viewHolder;
            vh.mName.setText(list.get(i).name);
            vh.mPhone.setText(list.get(i).phone);
        }
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
 //多布局操作->1布局对应1ViewHolder
    //首字母布局对应的ViewHolder
    class TitleViewHolder extends RecyclerView.ViewHolder{
    TextView mTitle;
    public TitleViewHolder(@NonNull View itemView) {
            super(itemView);
            mTitle = itemView.findViewById(R.id.title_Tv);
        }
    }
    //联系人详情对应的ViewHolder
    class PhoneViewHolder extends RecyclerView.ViewHolder{
    TextView mName;
        TextView mPhone;
public PhoneViewHolder(@NonNull View itemView) {
            super(itemView);
            mName = itemView.findViewById(R.id.name1_Tv);
            mPhone = itemView.findViewById(R.id.phone1_Tv);
        }
    }
}

六.随机高度瀑布流

1.适配器代码:

在这里插入图片描述

2.item行布局ImageView添加的属性

在这里插入图片描述

七.XRecyclerView的使用:上拉加载 下拉刷新

1.XRecyclerView和RecyclerView的区别:

1.从Android5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecyclerView.可以用来代替传统的ListView,更加强大和灵活

2.XRecyclerView用法:

1.gradle中导入XRecyclerview引用;
       implementation 'com.android.support:recyclerview-v7:28.0.0'
       api('com.jcodecraeer:xrecyclerview:1.5.9') {
       exclude group: 'com.android.support'
}
    2.其他和Recyclerview一样

3.XRecyclerView常见方法:

在这里插入图片描述

RecyclerView彩虹瀑布流实现 目录:     1.瀑布流的应用场景     2.瀑布流布局实现的简单分析     3.实现彩虹瀑布流   1.瀑布流的应用场景        瀑布流的应用在移动开发中还是比较常见的,譬如在一些图片类和电商类APP中用来展示摄影图片或者商品信息,由于有时候图片的规格是不一致的,所以就有了交错的瀑布流布局的需求。   2..瀑布流布局实现的简单分析            其实瀑布流... 阅读详情

相关推荐

Android-一个随机显示RecycylerViewItem附带animation效果

一个随机显示RecycylerView Item, 附带animation效果

Android:RecycleView基本使用(瀑布流)

RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。它被作为ListView和GridView控件的继承者,在最新的support-V7版本中提供支持。 有了 ListView、GridView 为什么还需要 RecyclerView 这样的控件? 优点 :RecyclerView 提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同La...

qq_39131246的博客 1120

Recycleview实现复杂页面三种以上布局 瀑布流多布局 scrollview嵌套recyclerView 显示不全滑动冲突

Recycleview实现复杂页面三种以上布局 瀑布流多布 scrollview嵌套recyclerView 显示不全滑动冲突

Recyclerview

Android工程搭建Recyclerview1、Recyclerview重要的方法2、RecyclerView依赖3、具体代码4、手机联系人多布局5、随机高度瀑布流6、item行布局ImageView添加的属性 Recyclerview RecyclerView比ListView的优势: 1.RecyclerView比listview实现效果更多 2.RecycelrView支持多布局; 3.R...

XinHao_Sir的博客 400

【QGIS】【OsGeo4w】安装方法

every blog every motto: You will never know unless you try 0. 前言 因为目前要使用QGIS,然而环境配置就整了大半天,哎,进行简单记录,方便自己方便他人。 一共分为两种方式安装: 独立安装包 网络安装包(下载osgeo4w-setup) QGIS提供了不同的版本: 长期发行版(LTR) 最新版(LR) 开发人员版本(DEV,母版或测试版) 说明: 本文推荐第二种 1. 正文 1.1 下载osgeo4w 下载链接 下载完成: 1.2

胡侃有料的博客 2万+

SAP FICO 银企直联实战:从配置到异常处理的全流程解析

本文详细解析了SAP FICO银企直联的实战配置与异常处理全流程,涵盖银行主数据搭建、支付类配置、银行接口适配等关键步骤。通过实际案例分享,帮助用户掌握实时付款、余额监控和自动对账等核心功能,提升企业财务效率与安全性。特别针对常见问题如凭证重复付款、前置机UUID冲突等提供了实用解决方案。

weixin_29215815的博客 663

android 瀑布流 随机宽度,RecyclerView瀑布流任性拒绝随机高度

今天,有一个需求,就是做一个瀑布流。第一反应,相当简单,RecyclerView实现瀑布流的方便快捷,早已如雷贯耳,博文遍地了。于是,我踩上了这个惊天大坑了。我还以为RecyclerView 会为每个item 动态设置高度,然而,呵呵( ̄ ̄)"。想得美。然后,更让人无语的是,网上这么多博文,竟然都是靠随机高度来解决这一个问题,面对这么草率的解决办法,我是拒绝的。特此发表博文,用另外一种方式,动态改...

weixin_30327815的博客 782

汇川伺服Modbus-RTU通讯实战:从帧结构解析到西门子PLC配置

本文详细解析了汇川伺服与西门子PLC通过Modbus-RTU协议进行通讯的实战步骤,包括帧结构解析、硬件连接、参数设置及PLC程序配置。通过具体案例和常见问题排查指南,帮助工程师快速掌握工业自动化中的通讯技术,提升设备调试效率。

weixin_33670713的博客 453

RecyclerView瀑布流造成的item错乱

作者:燕歆波 导读:使用瀑布流时,发现item的顺序在滑动时突然顺序改变了,造成了设置的间距变化,从而导致整个页面错乱。 简介 在adapter中,我获取item的位置,根据位置设置item的左右间距: 如果像上面一样,第一个item比第二个item的高度低的话,那么是没有问题的(偶数item在左,奇数item在右); 但是如果第一个item比第二item高的话,就会出现偶数item在右,奇...

yanxiaosa的博客 3471

告别OFDM卡顿:用MATLAB手把手仿真AFDM波形,搞定高铁、无人机通信的时变信道难题

本文详细介绍了如何使用MATLAB仿真AFDM波形,解决高铁和无人机通信中的时变信道难题。通过仿射变换技术,AFDM在多普勒频移严重的场景下表现优异,显著提升通信质量。文章包含参数配置、波形生成、性能对比等实战内容,适合通信工程师和研究人员参考。

weixin_27014595的博客 318

深入解析USB3.0一致性测试的关键技术与实践指南

本文深入解析了USB3.0一致性测试的核心技术与实践指南。文章阐述了测试如何确保设备在5Gbps高速传输下的信号完整性、电源管理合规性及协议兼容性,并提供了从测试系统搭建到完整流程执行的实战经验,帮助工程师有效应对高速信号、电源与兼容性三大核心挑战。

weixin_29164091的博客 280

Recyclerview基础+接口回调点击事件+多布局+随机值生成瀑布流

第1天Recyclerview基础 Recyclerview 一.效果:线性/网格/瀑布流 二.重要的方法 三.RecyclerView的使用 四.代码 五.实现多布局只给出适配器代码:微信通讯录页面 六.随机高度瀑布流 1.适配器代码: 2.item行布局ImageView添加的属性 七.XRecyclerview的使用:上拉加载 下拉刷新 1.XRecyclerView和Recyclervie...

lizhuang_666的博客 423

MTK Camera HAL 与 FeaturePipe 架构解析:从硬件抽象到功能管线的工程落地路径

MTK 的 Camera 系统在 Android 平台下采用高度模块化的 HAL 与 FeaturePipe 架构组合,分别承担着底层硬件抽象与上层功能封装的职责。通过将 ISP、3A 算法、Sensor 驱动与图像处理节点解耦封装于功能链条中,联发科平台实现了灵活可控的影像能力调度机制。本文将基于真实项目实践,系统解析 MTK Camera HAL 与 FeaturePipe 架构的设计思路、核心模块与运行机制,结合 AE/AWB/AF 控制流、Buffer 管理策略、功能管线构建方法与多线程调度实现方式

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1571

第1天Recyclerview基础+接口回调点击事件+多布局+随机值生成瀑布流

第1天Recyclerview基础Recyclerview一.效果:线性/网格/瀑布流二.重要的方法三.RecyclerView的使用四.代码五.实现多布局只给出适配器代码:微信通讯录页面六.XRecyclerview的使用:上拉加载 下拉刷新1.XRecyclerView和Recyclerview的区别:2.XRecyclerView用法:3.XRecyclerView常见方法: Recycle...

qq_34178710的博客 1381

《UDS协议从入门到精通》系列——图解0x14:清除诊断信息

图解0x14:清除诊断信息,简洁易懂,迅速上手!

车载系统攻城狮 4824

手把手教你学 GPU SoC 芯片(9.3)--GPU SOC 功耗和热管理的动态电压和频率调整(DVFS)

通过动态电压和频率调整(DVFS),可以有效地管理GPU SoC的功耗和热管理。合理的DVFS策略不仅可以节省功耗,提高能效,还可以延长设备的使用寿命。

MHD0815的博客 1498

安卓 Recyclerview(三种排列方式)

Recyclerview基础+接口回调点击事件+多布局+随机值生成瀑布流 效果图1 效果图2 效果图3(瀑布流) java代码 // An highlighted block package bw.com.androidthird; import android.graphics.drawable.Drawable; import android.support.v7.app.AppCom...

a_BinKiss的博客 720

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RecyclerView用法之瀑布流的实现

随着md风格的推行,RecyclerView的使用日趋增多,而且经常与CardView组合起来形成强大绚丽的布局效果,而瀑布流就是其中比较常见的效果之一,今天就来记录一下如何简单实现瀑布流效果。 1.首先,先来讲下RecyclerView的item常见分布形式,RecyclerView用RecyclerView.LayoutManager类实现其item的排布方式,系统已经为我们默认提供了三个实

沐风的博客 1303

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android控件RecyclerView实现横向滑动、瀑布流。

Android控件RecyclerView实现横向滑动、瀑布流。

风雨踏梦行 1万+

RecyclerView实现瀑布流效果(二)

在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager。其中StaggeredGridLayoutManager可实现交错式网格布局,正好可以用来实现瀑布流。 下面先看看效果图吧,再贴代码: 其中大部分内容实现其实是和上篇文章

【博客地址迁移到】:https://zhengxiaoyong.com 1万+

Android使用RecyclerView实现瀑布流

/设置竖直瀑布流的height集合值://设置水平瀑布流的height集合值://设置水平瀑布流的height集合值: 如果有该值 则不重复创建if (null!i++){//设置竖直瀑布流的height集合值:if (null!i++){//数据改变后要执行的操作的封装 b//设置竖直瀑布流的height集合值://设置水平瀑布流的height集合值:@Override。

2301_79985012的博客 375

Android RecyclerView瀑布流

RecyclerView相信大家都有一定了解,通过导入support-v7进行使用, 提供了一种插拔式的体验,高度的解耦,异常的灵活, 通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现一些非常炫效果。 今天就来写一个RecyclerView的瀑布流,供大家点评; 首先导入依赖: compile 'com.and

yangsenhao的博客 2968

android瀑布流背景广告,RecyclerView实现优雅的瀑布流图片加载

开篇这是我在简书上写的第一篇博客。非常喜欢简书的风格,所以想在这里写下我Android之路所遇到的一些麻烦,和我如何解决这一问题。之前一直使用ListView和GridView来应用在开发中,但是一直仰慕RecyclerView的大名,故开始踏上了RecyclerView的使用之旅。在使用过程中是遇到了很多的坑,比如说给RecyclerView 加上事件监听,我直接在RecyclerView上ad...

weixin_35501677的博客 719

Android使用RecyclerView实现瀑布流效果的列表展示

瀑布流效果图: 第一步:设置RecycleView的布局管理器为瀑布流StaggeredGridLayoutManager RecyclerView rlv = view.findViewById(R.id.pop_rlv); rlv.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManage...

_万能的博哥的博客 4108

Android RecyclerView 的基本使用--瀑布流

前面两篇文章主要讲了用RecyclerView实现ListView和GridView,这篇文章主要探讨一下RecyclerView 的 瀑布流使用。利用RecyclerView可以很方便地实现瀑布流。 那么如何实现?其实你什么都不用做,只要使用StaggeredGridLayoutManager我们就已经实现了,只是上面的item布局我们使用了固定的高度,下面我们仅仅在适配器的onBindView

香蕉你个不呐呐的博客 1036

RecyclerView实现瀑布流

我们在使用RecyclerView时,更多的是通过网络请求得到数据,比如在加载图片或者列表项时,我们往往需要判断当前屏幕上显示的第一个item的postion是多少,最后一个item的postion是多少,当前屏幕共显示了几个item项,如果使用ListView或者GridView来判断当然好判断,只要实现AbsListView.OnScrollListener这个接口就可以得到,那么在Recyc

u013378580的博客 504
上一篇: Fragment基础知识
下一篇: slidemenu实现流程以及常用的方法+surfaceview播放视频+surfaceview发送弹幕整理代码
TimPika
博客等级 码龄7年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值