RecyclerView的升级使用--------(二)

本文详细介绍了RecyclerView控件的特点及其相较于ListView和GridView的优势。通过设置不同的LayoutManager、ItemDecoration和ItemAnimator,可以轻松实现复杂的数据展示效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      写过基础的RecyclerView之后也是不明白为什么那么多人喜欢用RecyclerView,那么复杂,现在终于知道啦。

RecycleView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。该控件用于在有限的窗口中展示大量数据集,它被作为ListView和GridView控件的继承者。

那么有了ListViewGridView为什么还需要RecyclerView这样的控件呢?整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManagerItemDecoration , ItemAnimator实现令人瞠目的效果

你想要控制其显示的方式,请通过布局管理器LayoutManager

· 你想要控制Item间的间隔(可绘制),请通过ItemDecoration

· 你想要控制Item增删的动画,请通过ItemAnimator

· 你想要控制其显示的方式,请通过布局管理器LayoutManager

         你想要控制点击,长按事件,请自己写

   下面来写一下RecyclerView的Item间的间隔(divier)的绘制,以及通过布局管理器LayoutManager来控制其显示的方式。

        并且自己来写Item的点击事件,首先点击事件是写在Adapter里面的,不多说,上图。

       

interface OnItemClickListener{
    void Click(View v ,int pos , String str);
}
private OnItemClickListener listener;
public void setOnItemClickListener(OnItemClickListener listener){
    this.listener = listener;
}

准备工作就到这里了,然后在需要点击监听的地方调用方法就Ok了,在这里我们需要在item点击调用,so

public MyViewHolder(View itemView) {
    super(itemView);
    textView = (TextView) itemView.findViewById(R.id.id_demo_text);

    itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (listener != null){
                listener.Click(v,getLayoutPosition(),mDatas.get(getLayoutPosition()));
            }
        }
    });
}
我们再次回到我们的activity代码里面

adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
    @Override
    public void Click(View v, int pos, String str) {
        Toast.makeText(MainActivity.this,"哈哈哈"+mDatas.get(pos),Toast.LENGTH_SHORT).show();
    }
});
这样,我们的item监听就算完成了,运行起来发现界面非常的丑,没有分割线divier,so

recycleView.addItemDecoration(new DividerItemDecoration(this,4));
这个用来给我们的RecyclerView添加分割线的


recycleView.setLayoutManager(new LinearLayoutManager(this));
这个是RecyclerView的布局管理器,再次就不多试了,各位看官有需要自己尝试。



联动 RecyclerView:即使不用饿了么订餐,也请务必收藏好该库!由来Linkage-RecyclerView 是一款基于 MVP 架构开发的级联动列表控件。它是因 “RxJava 魔法师” 这个项目的需求而存在。在最初寻遍了 GitHub 也没有找到合适的开源库(高度解耦、可远程依赖)之后,我决心研究参考现有开源项目关于级联动的逻辑,并自己动手编写一个 高度解耦、轻松配置、可通过 maven 仓库远程依赖 的真正的第三方库。Linkage-RecyclerView 的个性化配置十分简单,依托于 MVP 的 “配置解耦” 特性,使用者无需知道内部的实现细节,仅通过实现 Config 类即可完成功能的定制和扩展。此外,在不设置自定义配置的情况下,LinkageRecyclerView 最少只需 一行代码即可运行起来。RxMagicEleme LinearEleme Grid目标Linkage-RecyclerView 的目标是:一行代码即可接入级联动列表。除了一键接入而省去 99% 不必要的、复杂的、重复的工作外,你还可以从这个开源项目获得的内容包括:整洁的代码风格和标准的资源命名规范。MVP 架构在第三库中的最佳实践:使用者无需了解内部逻辑,通过实现接口即可轻松完成个性化配置。优秀的代码分层和封装思想,在不做任何个性化配置的情况下,一行代码即可接入。主体工程基于前沿的、遵循关注点分离的 JetPack MVVM 架构。AndroidX 和 Material Design 2 的全面使用。ConstraintLayout 约束布局的最佳实践。绝不使用 Dagger,绝不使用奇技淫巧、编写艰深晦涩的代码。如果你正在思考 如何为项目挑选合适的架构 的话,这个项目值得你参考!简单使用:1.在 build.gradle 中添加对该库的依赖。implementation 'com.kunminx.linkage:linkage-recyclerview:1.2.0'2.依据默认的联动实体类(DefaultLinkageItem)的结构准备一串 JSON。// DefaultLinkageItem.ItemInfo 包含三个字段: String title //级选项的标题(必填) String group //级选项所在分组的名称,要和对应的一级选项的标题相同(必填) String content //级选项的内容(选填)[   {     "header": "优惠",     "isHeader": true   },   {     "isHeader": false,     "t": {       "content": "好吃的食物,增肥神器,有求必应",       "group": "优惠",       "title": "全家桶"     }   },   {     "header": "热卖",     "isHeader": true   } ]3.在布局中引入 LinkageRecyclerView 。<?xml version="1.0" encoding="utf-8"?>      4.在代码中解析 JSON,最少只需一行代码即可完成初始化。List items = gson.fromJson(...); //一行代码完成初始化 linkage.init(items);个性化配置:该库为一级和级 Adapter 分别准备了 Config 接口(ILevelPrimaryAdapterConfig 和 ILevelSecondaryAdapterConfig),自定义配置时,即是去实现这两个接口,来取代默认的配置。之所以设置成接口的形式,而非 Builder 的形式,是因为级联动列表内部的联动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值