RecyclerView介绍(二)实现ListView的效果

RecyclerView和ListView使用对比分析 又到了更新博文的时间了,最近在看一本很不错的心理学书籍,名字叫做 《拖延心理学》,封面长下面这样子书的内容主要是分析拖延症患者是如何把一件事一拖再拖,最后引发最终心里的焦虑和不安,甚至找了各种借口来做一些然并卵的自我安慰,最后再告诉你如何去改善自己的拖延症。目前我看了这书大约六分之一,就被各种心理分析打脸无数次,奈何此书写得太好,所以分享给有需要的童鞋(拖延症患者做好被无情打脸的心理准备)。刚好本... 阅读详情

1.在as当中导入RecyclerView的jar包:
compile ‘com.android.support:recyclerview-v7:23.1.0’
2.在布局文件当中生命RecyclerView的控件

package demo.yangzc.com.recycledemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import java.util.ArrayList;
import java.util.List;
public class RecycleDemoActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private List<String> mDatas;
    private RecyclerViewAdapter mAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycle_demo);
        initViews();
        initDatas();
    }
    private void initViews() {
        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }
    private void initDatas() {
        mDatas = new ArrayList<String>();
        for (int i = 'A'; i <= 'z'; i++) {
            mDatas.add("" + (char) i);
        }
        mAdapter = new RecyclerViewAdapter(this, mDatas);
        mRecyclerView.setAdapter(mAdapter);
        //设置RecyclerView的布局管理
        // 1.上下文 2.放向 3.是否反向布局
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        mRecyclerView.setLayoutManager(linearLayoutManager);
        //设置RecycView的Item间的分割线
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
    }
}

Adapter

package demo.yangzc.com.recycledemo;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
/**
 * @author yangzc
 * @data 2015/12/1 17:40
 * @desc RecyclerViewAdapter
 */
public class RecyclerViewAdapter extends RecyclerView.Adapter<MyViewHoder> {
    //用于每个item的布局
    private LayoutInflater mInflater;
    private Context mContext;
    protected List<String> mDatas;
    @Override
    //创建ViewHoler
    public MyViewHoder onCreateViewHolder(ViewGroup parent, int viewType) {
        //item布局
        View view = mInflater.inflate(R.layout.item_simple_textview, parent, false);
        //传入item布局
        MyViewHoder viewHoder = new MyViewHoder(view);
        return viewHoder;
    }
    public void addData(int position) {
        mDatas.add(position, "Insert One");
        //不会去刷新所有的View 就不会重置position
        notifyItemInserted(position);
    }
    public void delData(int position) {
        mDatas.remove(position);
        notifyItemRemoved(position);
    }
    @Override
    //绑定ViewHolder
    public void onBindViewHolder(final MyViewHoder holder,  int position) {
        holder.textView.setText(mDatas.get(position));
    }
    @Override
    public int getItemCount() {
        return mDatas == null ? 0 : mDatas.size();
    }
    public RecyclerViewAdapter(Context context, List<String> datas) {
        this.mContext = context;
        this.mDatas = datas;
        mInflater = LayoutInflater.from(context);
    }
}
class MyViewHoder extends RecyclerView.ViewHolder {
    TextView textView;
    public MyViewHoder(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.id_tv);
    }
}

item的布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_margin="3dp"
    android:background="@drawable/item_bg"
    android:layout_height="72dp">

    <TextView
        android:id="@+id/id_tv"
        android:layout_width="72dp"
        android:layout_height="match_parent"
        android:gravity="center"/>


</FrameLayout>

实现间隔效果:

package demo.yangzc.com.recycledemo;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
 * @author yangzc
 * @data 2015/12/1 19:51
 * @desc 实现了RecyclerView添加分割线(当使用LayoutManager为LinearLayoutManager时)
 * 该实现类可以看到通过读取系统主题中的 android.R.attr.listDivider作为Item间的分割线,并且支持横向和纵向。
 */
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * limitations under the License.
 */
/**
 * This class is from the v7 samples of the Android SDK. It's not by me!
 * <p/>
 * See the license above for details.
 */
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
    //获取属性的分割
    private static final int[] ATTRS = new int[]{
            android.R.attr.listDivider
    };
    public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
    public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
    private Drawable mDivider;
    private int mOrientation;
    public DividerItemDecoration(Context context, int orientation) {
        final TypedArray a = context.obtainStyledAttributes(ATTRS);
        mDivider = a.getDrawable(0);
        a.recycle();
        setOrientation(orientation);
    }
    public void setOrientation(int orientation) {
        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
            throw new IllegalArgumentException("invalid orientation");
        }
        mOrientation = orientation;
    }
    @Override
    public void onDraw(Canvas c, RecyclerView parent) {
        if (mOrientation == VERTICAL_LIST) {
            drawVertical(c, parent);
        } else {
            drawHorizontal(c, parent);
        }
    }
    public void drawVertical(Canvas c, RecyclerView parent) {
        final int left = parent.getPaddingLeft();
        final int right = parent.getWidth() - parent.getPaddingRight();
        final int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            final View child = parent.getChildAt(i);
            android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                    .getLayoutParams();
            final int top = child.getBottom() + params.bottomMargin;
            final int bottom = top + mDivider.getIntrinsicHeight();
            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }
    public void drawHorizontal(Canvas c, RecyclerView parent) {
        final int top = parent.getPaddingTop();
        final int bottom = parent.getHeight() - parent.getPaddingBottom();
        final int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            final View child = parent.getChildAt(i);
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                    .getLayoutParams();
            final int left = child.getRight() + params.rightMargin;
            final int right = left + mDivider.getIntrinsicHeight();
            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }
    @Override
    public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
        if (mOrientation == VERTICAL_LIST) {
            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
        } else {
            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
        }
    }
}

最终效果
这里写图片描述
ok 到这用RecyclerView实现listView效果就介绍完了,接下来我们介绍一下GridView效果的实现

Android Filter ListView, RecyclerView 今天整理的是之前项目中写的一个首页针对于列表进行条件过滤的效果。相关描述: 此次省略xxx字… 。 还是来看一下效果图吧(稍微有那么一点点大,1.5M左右,注意看好操作之后的变化):废话就不多说了,接下来直奔主题,先看一下我们的界面布局:<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schema 阅读详情

相关推荐

RecyclerView实现常见的列表菜单

在很多地方我们都会用到纵向列表样式的菜单,比如微信首页的我、发现页面,微博的首页的我页面,QQ的动态页面等等等等,大多数的应用中都会存在这样的页面。我们怎样实现这种页面比较好呢? 布局方案 完成这样的页面,常见的布局方案有: 1. 用ScrollView+LinearLayout很容易的暴力布局出来,但是这样得到的布局太固定了,如果条目多一点,加载起来很耗时。 2. 用ListView来实现,这种方案比方案一要好上不少,起码数据多点的时候,加载时不会太耗时。但是分割线和中间空白在要求差异化的时候,不太好绘制,用View的话又觉得大材小用。 3. 用RecyclerView来实现。Recy

Android上机实验-3 高级组件的使用

使用ListView或Recyclerview控件结合适配器的使用实现类似学习强国界面效果。其中自定义的item界面效果及素材等资源可自己发挥。掌握使用ArrayAdapter、SimpleAdapter、BaseAdapter实现填充数据。5、将模拟器运行结果截图到word文档中,并将核心代码复制到word文档中。掌握ListView控件和Recyclerview的基本使用方式。

qq_64314976的博客 436

DSP28335笔记——内部Flash中进行数据读写(Flash_API的使用)

Program时的报错返回值较为常见,对返回值30、31进行详解:返回值为30:每次操作写入16位的字节,直到Buffer中的数据全部写入,若写入的数据位超过16位时则返回值30。返回值为31:表示尝试将已有数据位上的0写成1。一般情况下,在Program操作之前,会将指定部分中的数据进行擦除;但擦除函数执行时间较久,且只能以扇区为单位进行擦除,因此也可以在已有数据的基础上再进行Program,但无法将已有数据的位中的0值写成1。

m0_46621336的博客 8749

RecyclerView的通用适配器的高级使用

前言 博主由于项目中频繁的使用了V7包中的RecyclerView来代替ListView的列表展示,所以抽空基于ListView的通用适配器的原理,给RecyclerView也写了一个通用适配器主要支持以下功能: 1.支持item的点击事件 2.支持item中的控件的点击事件(博主觉得具有创新性) 3.支持添加和移除头部(博主没有写添加尾部的方法,其实和添加头部的方法是类似的,如果你有需要

小金子的专栏 7049

【车辆仿真】从0开始建立dSPACE RT Simulink工程:输出模拟电平

0基础建议先看下前面的博文,补充基础知识。原来的博文太长太复杂,后续我会逐步梳理改进,去除操作层面的内容,仅关注知识层面,提升系列博文的系统性。【工程环境信息】:上位机:惠普台式PC(Windows 11专业版)下位机(实时机):SCALEXIO RTPC板卡:DS2680。

winnizap的博客 2055

从Gitee上部署视觉工程到Linux虚拟机

(使用SVM来识别装甲板的编号,此处手机上的图片中只有灯条没有数字,SVM无法识别出编号。这两行代码的意义是,当SVM识别不出或者识别不到编号时,把装甲板的编号默认为2号。找到自瞄程序中,数字识别类下的这两行代码,把注释去掉。这样,每次打开新的终端时,环境变量都会自动设置。(2)查看虚拟机设置选项,检查虚拟机USB接口是否为3.0及以上的接口。如果不是,要更改好。这样,每次打开新的终端时,环境变量都会自动设置。后,每次打开终端时自动设置这些环境变量,你可以将。打开第一个终端,用来挂ROS的内核启动页面。

2301_81035291的博客 1520

android 列表视图 ListView详解

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。抽空把对ListView的使用做了整理,并写了个小例子,如下图。  列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View。 2.适配器 用来把数据映射到ListView上的中介。 3.数据    具体的将被映射的字符串,图片,或者基

sunling的专栏 1169

LLC谐振变换器设计实战:从工作原理到参数设计与调试

开关电源设计是电力电子领域的核心技术,其核心目标在于提升效率与功率密度。为实现这一目标,软开关技术应运而生,它通过精心控制开关器件的电压与电流波形,使其在开通或关断瞬间实现零电压或零电流切换,从而从根本上降低开关损耗。LLC谐振变换器正是这一技术的杰出代表,它通过引入谐振网络,巧妙地实现了主开关管的零电压开关和次级整流管的零电流开关。这种拓扑结构在服务器电源、通信设备及高端显示驱动等要求高效率、高功率密度的应用场景中价值显著。本文将以半桥LLC为例,深入剖析其工作模态与增益特性,并系统阐述其参数设计、仿真验

weixin_34129696的博客 561

Android基础学习(四)—— ListView控件 & RecyclerView控件

Android基础学习

123 811

移远EC800M CAT1模块HTTP POST实战:从AT指令到OneNet平台数据上报(附STM32代码)

本文详细介绍了移远EC800M CAT1模块通过AT指令实现HTTP POST数据上报到OneNet平台的完整流程,包含STM32实战代码。内容涵盖PDP上下文激活、HTTP服务配置、JSON数据包构建等关键技术要点,并提供硬件连接、状态机设计和错误处理等实用方案,助力开发者快速实现物联网设备稳定数据传输。

weixin_42565652的博客 507

【Docker安装】Ubuntu 24.04.2 LTS系统下安装Docker环境——指定APT源安装方式

【Docker安装】Ubuntu 24.04.2 LTS系统下安装Docker环境——指定APT源安装方式

jks212454的博客 625

android RecyclerView实现ListView和GridView混合的效果。

如何实现ListView和GridView混合的效果,效果图: 一、可以使用以下方式: 1、以往的方式 1)使用ListView内嵌GridView。 2、RecycleView 1)使用单个RecycleView。 2)使用RecycleView内嵌RecycleView。 二、使用单个RecycleView。 1、如下图,由于使用一个RecycleView,我们可以把每个一红矩形看成一个item,那么就会有item1(标题)占整个屏幕的宽度,item2(内容)占屏幕的宽度的1/3。

sziitjin的博客 2152

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

1902

RecyclerView 实现item点击水波纹动画

第一种方法:直接在Item View中的LinearLayout /or CardView 添加代码–》 xml代码:android:background="?android:attr/selectableItemBackground" android:clickable="true" android:focusable="true"123第二种方法:在res/drawable 和 res/dr

zhengyongbo的博客 3662

网口通信实战(C#完整版):基于TCP协议的工业仪表数据采集系统开发

工业现场中80%的智能仪表(压力/温度/液位/流量/数显仪表)、采集模块、测控终端均支持TCP网口通信,这类设备的TCP通信有鲜明的工业特性:基于字节流的自定义二进制协议、一问一答的主从通信模式、对数据完整性/稳定性要求极高。本次实战是纯工业级落地项目,基于C# WinForm + .NET Framework 4.8(工业上位机标配)✅纯原生无依赖:零第三方类库/控件,仅用C#原生,源码可100%复用、无引用冲突、工控机完美兼容;✅双采集模式完美适配:同时实现「单次手动采集」+「连续自动采集」

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1800

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

RecyclerView--实现 ListView,GridView,瀑布流 效果

RecyclerView 是Google推出的最新的 替代ListView、GridView的组件,RecyclerView是用来显示大量数据的容器,并通过有限数量的子View,来提高滚动时的性能。 与ListView不同,RecyclerView 不再负责布局,而是专注于布局复用。布局主要通过 LayoutManager来管理,目前提供了3种常用的布局管理: LinearLa

Mr_WangGang的专栏 3万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android RecyclerView实现listview效果

Android RecyclerView实现listview效果 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView、GridView。 那么有了ListView、GridView为什么还需要Recyc

wujl2015的博客 710

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

使用RecyclerView实现GridView和ListView混排的效果

单位在做股票相关的app,美工切出一个图,是一个GridView和ListView混排的效果图,而且在滚动的时候,还要实现相关类别名有推动的效果,如下图:        录制的效果不是很好,因为csdn只能上传2M,所以点击的效果没有实现。下面会下载的地址。可以下载看一下。现在说一下实现的思路。个人感觉不是很好,只是为了完成功能,如果你有更好的思路或是方法,希望能告诉我。    1,Recy

我本无名的专栏 8614

别再用ListView了,试试RecyclerView叭!

别再用ListView了,试试RecyclerView叭!

一条屈依的博客 7753

ListView 与 RecyclerView 简单对比

RecyclerView 与 ListView 的主要区别: 布局效果对比 常用功能与API对比 在Android L引入嵌套滚动机制(NestedScrolling) ListView与RecyclerView的简单使用: ListView: 1. 继承重写BaseAdapter类; 2. 自定义ViewHolder与convertView的优化(判断是否为null); Re...

shu_lance的博客 2万+

ScrollableLayout从入门到精通:实现ListView与RecyclerView的无缝滚动

ScrollableLayout是一个强大的Android布局库,专注于实现共同头部与ViewPager、ListView、RecyclerView等滚动组件的无缝集成,帮助开发者轻松构建具有复杂滚动效果的现代应用界面。 ## 什么是ScrollableLayout? ScrollableLayout是一个专为Android平台设计的布局组件,它解决了在使用ViewPager切换不同滚动视图(

gitblog_00915的博客 613

RecyclerView和ListView的区别、RecyclerView优化

一 ListView和RecyclerView区别 ListView 1.Adapter继承的是BaseAdapter。 2.可以直接在布局中设置分割线。 3.点击事件自带setOnItemClickListener方法 4.自带增加头部尾部方法 addHeaderView和addFooterView...

无与伦比的猪 4144

RecyclerView 和 ListView对比

布局效果对比布局效果对比 RecyclerView默认支持线性布局,网格布局,瀑布流布局,同时支持横向,纵向滚动。 API ListView 继承重写BaseAdapter类 自定义ViewHolder和convertView一起完成复用工作 RecyclerView 继承重写RecyclerView.Adapter和RecyclerView.ViewHolder 设置布局管理器,设置布局效果 区别 ViewHodler编写规范化 RecyclerView复用item的工作封装好了,不需要Lis

云梦九章~ 9654

RecyclerView的介绍

1、RecyclerView的控件和定义 2、RecyclerView属性设置 3、RecyclerView优化和数据加载 4、三种显示方式 5、接口回调的使用 6、多布局 一.RecyclerView的介绍 RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视...

木晓的博客 5987

ListView与RecyclerView的区别

RecyclerView 与 ListView 的主要区别:布局效果对比常用功能与API对比在Android L引入嵌套滚动机制(NestedScrolling)缓存机制ListView与RecyclerView的简单使用:ListView: 1. 继承重写BaseAdapter类; 2. 自定义ViewHolder与convertView的优化(判断是否为null...

msc694955868的博客 2918

使用RecyclerView实现ListView,GridView效果

RecyclerView 是Google推出的最新的 替代ListView、GridView的组件,与ListView不同,RecyclerView 不再负责布局,而是专注于布局复用。布局主要通过 LayoutManager来管理,目前提供了3种常用的布局管理:                                               LinearLayoutManager

land_kun的博客 1110
上一篇: RecyclerView介绍(一)----简单概述
下一篇: RecyclerView介绍(四)----实现瀑布流效果
yang0range
博客等级 码龄12年 15粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值