增强版的ListView——RecyclerView的使用

RecyclerView的简单使用的实现 RecyclerView是ListView的增强版,通过LayoutManager对RecyclerView进行布局,可以多种现成的Layoutmanager展示数据,也可以自定义LayoutManager进行布局。1、它包含内置ViewHolder,不用再自己造轮子完成整个covertView的复用机制,代码结构更清晰工整。2、添加横向支持,即可以左右滚动,使用场景更广,比如可以用于Android TV上。 阅读详情

    Android 5.0以后提供了一个更强大滚动控件——RecyclerView,可以说是一个增强版的ListView,不仅可以轻松实现ListView 同样的效果,还优化了ListView 中存在的不足之处。RecyclerView 架构提供了一种插拔式的体验,它具有高度的解藕、异常的灵活性和更高的效率,通过设置他提供的不同的LayoutManager、ItemDecoration、ItemAnimator 可实现更加丰富多样的效果。但是不得不说的是RecyclerView 也有缺点和让人头疼的地方:设置列表的分割线需要自定义,另外列表的点击事件也需要自己去实现。OK,下面开始讲解RecyclerView 的基本用法。

    1、想要使用RecyclerView这个控件,首先要在项目的build.gradle 中添加相应的依赖库才行。打开app/build.gradle 文件,在dependencies 闭包中添加如下内容:  implementation 'com.android.support:recyclerview-v7:26.1.0'   

    添加成功后修改activity_main.xml 文件,代码如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>

</LinearLayout>

    还要创建一个适配器,新建MyAdapter类,让这个适配器继承RecyclerView.Adapter,并将泛型指定为MyAdapter.ViewHolder。

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

    private List<String> mList;
    private Context mContext;

    /**
     * 自定义适配器
     *
     * @param context
     * @param list
     */
    public MyAdapter(Context context, List<String> list) {
        this.mContext = context;
        this.mList = list;
    }

    /**
     * 创建自定义的ViewHolder
     *
     * @param parent
     * @param viewType
     * @return
     */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(mContext).
                inflate(R.layout.item_recycler, parent, false));
        return holder;
    }

    /**
     * 绑定ViewHolder
     *
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.tvItem.setText(mList.get(position));
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

    /**
     * 自定义ViewHolder
     */
    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView tvItem;

        public MyViewHolder(View itemView) {
            super(itemView);
            tvItem = (TextView) itemView.findViewById(R.id.tv_item);
        }
    }

}

 其中的item_recycler.xml 是一个只包含TextView的item,代码如下

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

    <TextView
        android:id="@+id/tv_item"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="111"
        android:textSize="18sp" />
</LinearLayout>

    在修改下MainActivity 中的代码,就可以初步实现一个简单的RecyclerView 了。 

        for (int i = 0; i < 20; i++) {
            lists.add(i + "");
        }
        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        // 设置布局管理器  默认是垂直布局
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        // 设置item 增加和删除时候的动画
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());

        myAdapter = new MyAdapter(this, lists);
        mRecyclerView.setAdapter(myAdapter);

    而想要设置水平布局,代码如下设置

        // 设置水平布局
        LinearLayoutManager manager=new LinearLayoutManager(this);
        manager.setOrientation(LinearLayoutManager.HORIZONTAL);
        mRecyclerView.setLayoutManager(manager);

    还有网格布局,这个布局管理器的第一个参数是一行显示多少个,第二个参数是以什么形式显示

        // 设置网格布局                                                                                  
        StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,
                LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(layoutManager);

    代码跑起来后,很明显的发现,并没有像ListView那样,有默认的分割线,这就需要我们自己继承RecyclerView.ItemDecoration 来自定义分割。我自己写了一个MyDividerItemDecoration类,代码如下:

/**
 * author: smile .
 * date: On 2018/5/19
 */
public class MyDividerItemDecoration 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;
    // 分割线的高度  默认是mDivider.getIntrinsicHeight()=1
    private int mDividerHeight = 2;
    // 分割线的方向
    private int mOrientation;
    // 自定义画笔工具
    private Paint mPaint;

    /**
     * 构造函数  自定义分割线
     *
     * @param context     环境
     * @param orientation 布局方向
     */
    public MyDividerItemDecoration(Context context, int orientation) {
        final TypedArray array = context.obtainStyledAttributes(ATTRS);
        mDivider = array.getDrawable(0);
        array.recycle();
        setOrientation(orientation);
    }

    /**
     * 构造函数  自定义分割线
     *
     * @param context     环境
     * @param orientation 布局方向
     * @param drawableId  分割线图片
     */
    public MyDividerItemDecoration(Context context, int orientation, int drawableId) {
        mDivider = ContextCompat.getDrawable(context, drawableId);
        mDividerHeight = mDivider.getIntrinsicHeight();
        setOrientation(orientation);
    }

    /**
     * 构造函数  自定义分割线
     *
     * @param context      环境
     * @param orientation  布局方向
     * @param dividerHight 分割线高度
     * @param dividerHight 分割线颜色
     */
    public MyDividerItemDecoration(Context context, int orientation, int dividerHight, int dividerColor) {
        mDividerHeight = dividerHight;
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setColor(dividerColor);
        mPaint.setStyle(Paint.Style.FILL);
        setOrientation(orientation);
    }

    /**
     * 判断绘制横向的分割线还是纵向的分割线
     *
     * @param orientation 布局方向
     */
    public void setOrientation(int orientation) {
        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
            // 跑出非法参数异常
            throw new IllegalArgumentException("invalid orientation");
        }
        mOrientation = orientation;
    }

    /**
     * 进行绘制
     *
     * @param c      画布
     * @param parent 父控件
     * @param state
     */
    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        super.onDraw(c, parent, state);
        // 判断选择的方向是什么 来确定绘制什么方向的分割线
        if (mOrientation == VERTICAL_LIST) {
            drawVertical(c, parent);
        } else {
            drawHorizontal(c, parent);
        }
    }

    /**
     * 绘制垂直方向的分割线
     *
     * @param c
     * @param parent
     */
    private void drawVertical(Canvas c, RecyclerView parent) {
        // 获取左边的X值
        final int left = parent.getPaddingLeft();
        // 获取右边的X值
        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);
            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
            // 获取子空间的底部  即分割线的顶部 Y值
            final int top = child.getBottom() + params.bottomMargin;
            // 获取分割线的底部     顶部+分割线的高度
            final int bottom = top + mDividerHeight;
            Log.e("MyDivider", "drawVertical: " + left + "-------" + top + "-------"
                    + right + "------" + bottom);
            if (mDivider != null) {
                // 设置分割线的范围
                mDivider.setBounds(left, top, right, bottom);
                // 绘制分割线
                mDivider.draw(c);
            }

            if (mPaint != null) {
                c.drawRect(left, top, right, bottom, mPaint);
            }
        }
    }

    /**
     * 绘制水平方向的分割线
     *
     * @param c
     * @param parent
     */
    private void drawHorizontal(Canvas c, RecyclerView parent) {
        // 获取分割线的顶部Y 值
        final int top = parent.getPaddingTop();
        // 获取分割线的底部Y 值
        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);
            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
            // 获取子空间的右边  即分割线的左边X值
            final int left = child.getRight() + params.rightMargin;
            // 获取分割线的右边  左边+分割线的高度
            final int right = left + mDividerHeight;
            if (mDivider != null) {
                // 设置分割线的范围
                mDivider.setBounds(left, top, right, bottom);
                // 绘制分割线
                mDivider.draw(c);
            }

            if (mPaint != null) {
                c.drawRect(left, top, right, bottom, mPaint);
            }
        }
    }

    /**
     * 设置item 四个方向的值
     *
     * @param outRect
     * @param view
     * @param parent
     * @param state
     */
    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);
        // 为outRect 设置的四个方向的值   最终也会计入RecyclerView
        if (mOrientation == VERTICAL_LIST) {
            outRect.set(0, 0, 0, mDividerHeight);
        } else {
            outRect.set(0, 0, mDividerHeight, 0);
        }
    }
}

    这个MyDividerItem类中,提供了三个构造函数:第一个构造函数式只设置布局方向,分割线的样式和高度跟随系统默认。第二个构造函数是设置布局方向以及分割线的图片,分割线的样式由图片决定。第三个构造函数是设置布局方向、分割线的高度和颜色,采用画笔的方式将分割线实现。 设置完自定义的分割线后,我们只要在setAdapter 之前加入代码便可以加入分割线。

        // 设置分割线
        mRecyclerView.addItemDecoration(new MyDividerItemDecoration(this,
                MyDividerItemDecoration.VERTICAL_LIST, 3, Color.BLACK));

    接下来我们来自定义点击事件,自定义点击事件其实并不是很难,先自定义一个 OnItemClickListener 接口并提供回调,用来监听点击和长按事件,代码如下:

/**
 * 自定义回调接口
 */
public interface OnItemClickListener {
    void onItemClick(View view, int position);

    void onItemLongClick(View view, int position);
}

    在MyAdpater适配器中设置接口方法回调给对象

    /**
     * 设置接口回调对象
     *
     * @param onItemClickListener
     */
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.mOnItemClickListener = onItemClickListener;
    }
     接下来对item中的控件进行点击事件的监听并回调给我们的自定义的监听,代码如下:
    /**
     * 绑定ViewHolder
     *
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.tvItem.setText(mList.get(position));
        if (mOnItemClickListener != null) {
            holder.tvItem.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickListener.onItemClick(v, pos);
                }
            });
            holder.tvItem.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickListener.onItemLongClick(v, pos);
                    return false;
                }
            });
        }
    }

    最后在Activity中对适配器设置监听:

        // 设置点击事件的回调
        myAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(MainActivity.this, "这是点击的第" + position + "条",
                        Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onItemLongClick(View view, final int position) {
                Toast.makeText(MainActivity.this, "这是长按的第" + position + "条",
                        Toast.LENGTH_SHORT).show();
            }
        });
    最后我还想添加一个长按当前Item 删除的功能。首先在MyAdapter 中添加一个removeData的方法
    /**
     * 删除数据并更新界面
     *
     * @param position
     */
    public void removeData(int position) {
        mList.remove(position);
        notifyItemRemoved(position);
    }
    然后更改长按监听的事件逻辑处理就可以了。
        // 设置点击事件的回调
        myAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(MainActivity.this, "这是点击的第" + position + "条",
                        Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onItemLongClick(View view, final int position) {
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("确定要删除吗?")
                        .setNegativeButton("取消", null)
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                myAdapter.removeData(position);
                            }
                        }).show();
            }
        });
    这时候长按会弹出对话框,删除时会有消失的动画效果。

    

    今天520,前几天重新回到了伟大的单身狗阶级,所以今天有时间写博客。我想对她说,我以后可能再也不能陪你走下去了,不要太要强,好好照顾自己,一定要幸福!!! 



Android第一行代码——快速入门 Kotlin 编程(4.6 更强大的滚动控件:RecyclerView) 还有,ListView 的扩展性也不够好, 它只能实现数据纵向滚动的效果,如果我们想实现横向滚动的话,ListView 是做不到的。这 里告诉你一个小窍门,当你不能确定最新的版本号是多少的时候,可以就像上述代码一样填入 1.0.0 ,当有更新的库版本时,Android Studio 会主动提醒你,并告诉你最新的版本号是多少, 如图4.32 所示。方法中注册点击事件。我们已经知道,ListView 的扩展性并不好,它只能实现纵向滚动的效果,如果想进行横向滚动的话,ListView 就做不到了。 阅读详情

相关推荐

底部自定以dialog添加recyclerView

用MVP写的一个自定义dialog,dialog里添加的recyclerView,item为一个滑动条的自定义控件,滑动dialog里的滑动条,会把值传递到activity中.

Dialog 和 RecyclerView 一起用

Dialog RecyclerView

u011370933的专栏 1万+

华为Watch的ECG功能技术分析

华为Watch的ECG(心电图)功能通过硬件传感器、算法优化和医疗认证的结合,实现了对心脏电活动的监测和房颤(AFib)等心律失常的预警。采用医疗级ECG模拟前端芯片(AFE),如TI(德州仪器)的ADS1292R等,支持低噪声、高采样率(通常≥200Hz)。结合PPG(光学心率)数据交叉验证,提高检测可靠性(如ECG和PPG心率不一致时触发警告)。通过RR间期变异性判断心律是否规则,识别房颤(AFib)的典型特征(如不规则不规则心律)。结合加速度计数据,识别手臂运动导致的信号失真,动态调整算法参数。

xu_wenming的博客 6437

android--RecyclerView+DialogFragment示例代码

这就是dialogFragment自定义的类:负责显示出一个dialog。因为结构很乱,所以我就随便发了,但是不可能把整个项目全都发出来。点击评论以后弹出底部对话框---dialogFragment。这个文件主要就初始化几个变量。

631

干法刻蚀工艺进阶:如何通过调节DC自偏压优化刻蚀速率和各向异性

本文深入探讨了干法刻蚀工艺中DC自偏压的精细调控艺术。DC自偏压是影响刻蚀速率和各向异性的关键因素,文章通过实战案例,详细分析了如何通过调节射频功率、频率、腔室压力及气体成分等参数,间接而有效地控制DC自偏压,从而优化高深宽比硅沟槽等复杂结构的刻蚀效果,实现工艺性能的精准提升。

weixin_28308325的博客 326

多机器人协同:水下机器人集群的分布式控制与ROS仿真实践

本文探讨了多自主水下机器人(AUV)集群的分布式控制方法,重点分析了欠驱动6自由度AUV模型的反馈线性化技术。通过ROS/Gazebo仿真平台,详细介绍了系统架构设计、通信延迟补偿策略及环境扰动应对方案,为水下协同作业提供实用参考。

jupi8的博客 686

RecyclerView的基本使用方法

RecyclerView的使用方法(使用的Android Studio开发)首先是在app的build.gradle中添加recyclerview的依赖: compile 'com.android.support:recyclerview-v7:26.1.0'使用RecyclerView实现的主要功能是Item的添加和删除以及ListView,GridView和瀑布流的切换,还有就是Item的长按...

yushuangping的博客 802

STM32H743 ADC校准失败排查:HAL_ADCEx_Calibration_Start()的正确调用时机

本文深入剖析了STM32H743 ADC校准失败的核心原因,即错误地在ADC使能状态下调用HAL_ADCEx_Calibration_Start()函数,导致读数漂移。文章详细解释了校准必须在ADC禁用状态下进行的硬件原理,列举了典型错误场景,并提供了上电初始化与周期性重校准的正确代码实践,帮助开发者彻底解决ADC精度问题。

ik678901的博客 1175

Android|使用BottomSheetDialog和RecyclerView实现底部弹出评论区功能

Android中使用BottomSheetDialog和RecyclerView实现底部弹出评论区功能

纸鱼PaperFish的博客 2868

译码器Multisim电路仿真汇总——硬件工程师笔记

本文详细介绍了74LS139D和74LS138D两种TTL译码器的功能特点及应用。74LS139D是2线-4线译码器,具有低电平有效输出和使能控制功能,常用于地址译码和数据分配。74LS138D是3线-8线译码器,通过3位输入实现8路输出控制,广泛应用于微处理器系统。文中提供了两种芯片的引脚说明、真值表和典型应用电路,并附有硬件工程师笔试面试相关资源链接。这些基础知识对数字电路设计和硬件工程师面试准备具有重要参考价值。

XU157303764的博客 1260

AWR2243的等效相位中心与虚拟通道

在俯仰维方向上,不重合的虚拟通道有8个,排序为1:4,9:12。每个虚拟阵元之间的间隔为lambda/2。实际y轴方向虚拟阵列只跨越了8*lambda/2的距离。等效相位中心与虚拟通道类似,只是每个相位中心之间间隔为lambda/4,实际y轴方向等效相位中心只跨越了8*lambda/4=7.59mm的距离

qq_50974341的博客 1981

Dialog 或者 DialogFragment 使用 RecycleView 时,RecycleView 不显示数据

需求环境: 点击按钮,弹出 Dialog,然后 Dialog 的布局时一个RecycleView,列表显示一些 item 信息。 问题状况: List 数据源确实有了信息改变,但是 Adapter 确没有执行 onCreateViewHolder(); onBindViewHolder(); 回调方法,数据改变后,界面没有显示。 问题解决: 把代码在 Activity 中实现,发现是有数据

WillWolf_Wang的博客 5581

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

XiaoqiangClub的博客 3359

ListView的增强版RecyclerView

ListView由于其强大的功能,在过去的Android开发中可以说是贡献卓越,直达今天依然还有很多的程序在继续使用着ListView。但是ListViewd性能其实不是很好,而且扩展性差,它只能实现数据纵向滚动的效果,如果我们想实现横向滚动的话,ListView是做不到的。于是,Android提供了一个更强大的滚动控件——RecyclerView.可以说是一个增强版的ListView,不仅可以实现和ListView同样的效果,还优化了ListView中存在的各种不足之处。我们来看一下RecyclerVie

LaoK__的博客 314

深度解析长鑫G5 DRAM工艺的技术逻辑与微缩边界

长鑫存储G5 DRAM平台通过多重图形化、45:1高深宽比电容与外围HKMG技术,突破先进光刻受限瓶颈,在11.95 nm有源区半间距下实现阵列微缩与电容结构优化。其核心意义不在于对标国际节点,而在于系统性解决“尺寸缩小—电荷保持—外围跟进而”三大矛盾,展现国产DRAM在无EUV条件下推进先进制程的工艺整合能力。

硬核科技 34

IEM模型,地表粗糙度模拟

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

RecyclerView控件的基本使用(增强版的ListView)

ListView由于其强大的功能,在过去的Android开发当中可以说是贡献卓越,直到今天仍然还有不计其数的程序在继续使用着ListView。不过ListView并不是完全没有缺点的,比如说如果我们不使用一些技巧来提升它的运行效率,那么ListView的性能就会非常差。还有ListView的拓展性也不够好,它只能实现数据纵向滚动的效果,如果我们想实现横向滚动的话,ListView是做不到的。 为...

Android_小牧的博客 717

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

增强版ListView-RecyclerView

RecyclerView本文参考郭霖《第一行代码》第2版Recycyler不仅可以轻松实现和ListView同样的效果,还优化了ListView中存在的各种不足之处(性能不好,扩展性差,只能纵向滚动)。目前Android官方更加推荐使用RecyclerView,未来也会有更多的程序逐渐从ListView转向RecyclerView。依赖库RecyclerView定义在support库中,需要在项目m

xilove102的博客 870

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android中RecyclerView的使用

1. RecyclerView概述 Android提供了一个更强大的滚动控件——RecyclerView。 它可以说是一个增强版的ListView, 不仅可以轻松实现和ListView同样的效果, 还优化了ListView中存在的各种不足之处。 目前Android官方更加推荐使用RecyclerView, 未来也会有更多的程序逐渐从ListView转向RecyclerView。 2. RecyclerView使用 2.1 加入依赖库 首先需要在项目的build.gradle中添加相应的依赖库才行,在app/

weixin_43977647的博客 3193

《第一行代码》学习笔记:更强大的滚动控件——RecyclerView(增强版的 ListView)

一、基本用法 添加依赖库并编写布局文件 想要使用RecyclerView这个控件,首先需要在项目的app/build.gradle中添加相应的依赖库才行,在dependencies 闭包中添加如下内容: implementation 'androidx.recyclerview:recyclerview:1.1.0' **添加完之后记得要点击一下右上角Sync Now来进行同步。**然后修改activity_main.xml中的代码,如下所 示: <LinearLayout xmlns:andr

爱吃鸡翅的小鲨鱼的博客 461

Listview与RecyclerView对比浅析【重点对比缓存】

RecyclerView和ListView都是用于加载大量数据的控件,RecyclerView作为listview的改进加强型,相对于ListView,RecyclerView做出了以下优化: 1.布局效果 ListView 的布局比较单一,只有一个纵向效果; RecyclerView 的布局效果丰富, 可以在 LayoutMananger 中设置:线性布局(纵向,横向),表格布局,瀑布流布局 在RecyclerView 中,如果存在的 LayoutManager 不能满足需求,可以自定义 Layout

augfun的博客 3258

RecyclerView学习笔记

自学习android以来,其实一直都有接触到 RecyclerView,今天便总结一下关于RecyclerView的相关知识,并不是非常全面。主要从以下几个方面: RecyclerView概述 RecyclerView与ListView区别 RecyclerView基本使用 RecyclerView item单击与长按事件 RecyclerView item长按拖拽和侧滑删除 1. Recycler

Ti2Yuan的博客 1880

RecyclerView基本使用

RecyclerView是android 5.0推出的新的控件,官方给出的说明是: RecyclerView is a more advanced and flexible version of ListView. This widget is a container for large sets of views that can be recycled and scrolled ve

大写的Z 2503

实现横向无缝滚动_16 滚动控件RecyclerView

ListView由于其强大的功能,在过去的Android开发当中可以说是贡献卓越,直到今天仍然还有不计其数的程序在继续使用着ListView。不过ListView并不是完全没有缺点的,比如说如果我们不使用一些技巧来提升它的运行效率,那么ListView的性能就会非常差。还有,ListView的扩展性也不够好,它只能实现数据纵向滚动的效果,如果我们想实现横向滚动的话,ListView是做不...

weixin_33877700的博客 241

Android控件RecyclerView和ListView的异同

Android是一个不断进化的平台,Android 5.0的v7版本支持包中引入了新的RecyclerView控件,正如官方文档所言,RecyclerView是ListView的豪华增强版。它主要包含以下几处新的特性,如ViewHolder,ItemDecorator,LayoutManager,SmothScroller以及增加或删除item时item动画等。官方推荐我们采用RecyclerVi

AuthFailure的博客 587

RecyclerView的使用——简单例子

RecyclerView组件是一个更先进和灵活的版本的列表视图。这个小部件是一个非常有效率的容器,通过有限的views,可以滚动显示大型数据集。我们知道,Listview中的Adapter中可以实现ViewHolder的复用。RecyclerView提供了一个耦合度更低的方式来复用ViewHolder,并且可以轻松的实现ListView、GridView以及瀑布流的效果。RecyclerView支持水平滚动和垂直滚动

朦胧色彩 6546
上一篇: Android 启动服务配合AsyncTask 使用OKHttp 实现断点下载大文件实例
下一篇: 上传一个Android studio 项目需要忽略的内容
谦行
博客等级 码龄11年 182粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值