第八单元 万能适配器和BaseRecyclerViewAdapterHelper的使用

debounce的具体实践 Vue中的debounce应用 背景:优化搜索框的功能,在输入过程中,可以实时动态进行搜索,但是为了提高搜索效率,频繁进行查询,需要进行防抖 解决办法:在输入过程中,在一定时间内没有输入,再进行查找,采用debounce; 因此在编程时,需要注意两点: 第一:监听输入数据的变化,触发搜索(监听一般想到的是watch) 第二:进行防抖,并不是所有的输入,都需要进行搜索,采用定时来实现 具体实... 阅读详情

RecyclerView的万能适配器

首先写一个万能适配器的Holder的对象继承RecyclerView.ViewHolder 里面重写BaseHolder方法
然后定义一个getView方法从容器中取控件的id,这里要说的是 我们可以定义一个SparseArray的集合,设置View的泛型
从集合中根据id取控件
然后写一个BaseAdapter的适配器,继承RecyclerView.Adapter,泛型写成BaseHolder,重写三个方法,第一个方法是创建布局容器,第二个方法把行布局和控件绑定,第三个方法是返回长度,然后
定义上下文对象和数据源集合,构造,写一个getLayoutId的int型抽象方法查找行布局和一个绑定的抽象方法把控件绑定到布局上,然后生成子类,继承抽象方法在子类里定义不同的多布局适配

代码:

BaseHolder类

/**
 * 万能适配器的Holder 对象
 */
public class BaseHolder extends RecyclerView.ViewHolder {
    SparseArray<View> array=new SparseArray<>();
    public BaseHolder(@NonNull View itemView) {
        super(itemView);

    }
    /**
     * 从容器中取控件
     * @return
     */
    public View getView(int id){
        View v=null;
        v=array.get(id);//从集合中根据id取控件
        if(v==null){
            v=itemView.findViewById(id);
            array.put(id,v);
        }
            return  v;
    }
}

BaseAdapter适配器

public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseHolder> {
    Context context;
    ArrayList<T> data;//数据源

    public BaseAdapter(Context context, ArrayList<T> data) {
        this.context = context;
        this.data = data;
    }

    public abstract int getLayoutID();
    @NonNull
    @Override
    public BaseHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View inflate = LayoutInflater.from(context).inflate(getLayoutID(), null);
        return new BaseHolder(inflate);
    }

    @Override
    public void onBindViewHolder(@NonNull BaseHolder baseHolder, int i) {
        binding(baseHolder,i);
    }
    public abstract void binding(BaseHolder baseHolder,int i);//绑定
    @Override
    public int getItemCount() {
        return data.size();
    }
}

子适配器

public class FirstAdapter extends BaseAdapter<Integer> {
    Context context;
    ArrayList<Integer> strings1=new ArrayList<>();
    ArrayList<String> strings2=new ArrayList<>();

    public FirstAdapter(Context context1, ArrayList<Integer> strings1,ArrayList<String> strings2) {
        super(context1, strings1);
        this.context = context1;
        this.strings1 = strings1;
        this.strings2 = strings2;
    }

    @Override
    public int getLayoutID() {
        return R.layout.text;
    }

    @Override
    public void binding(BaseHolder baseHolder, int i) {
        //找到控件 赋值
        ImageView imageView = (ImageView) baseHolder.getView(R.id.image);
        imageView.setImageResource(strings1.get(i));
        TextView textView= (TextView) baseHolder.getView(R.id.text);
        textView.setText(strings2.get(i));
    }
}

MainActivity类

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private ArrayList<Integer> list = new ArrayList<>();
    private ArrayList<String> list2 = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        recyclerView = findViewById(R.id.recyclerView);
//        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
        list.add(R.mipmap.aa);
        list.add(R.mipmap.bb);
        list.add(R.mipmap.cc);
        list.add(R.mipmap.dd);
        list.add(R.mipmap.ee);
        list.add(R.mipmap.ff);
        list.add(R.mipmap.gg);
        list.add(R.mipmap.hh);
        list.add(R.mipmap.ii);
        list.add(R.mipmap.jj);
        list.add(R.mipmap.kk);

        list2.add("迟暮");
        list2.add("暮衍");
        list2.add("笑辞");
        list2.add("秋意");
        list2.add("爱殇");
        list2.add("苏墨");
        list2.add("陈秋");
        list2.add("无羁");
        list2.add("忘羡");
        list2.add("离合");
        list2.add("东苑");
        FirstAdapter firstAdapter=new FirstAdapter(Main2Activity.this,list,list2);
        recyclerView.setAdapter(firstAdapter);

//        new BaseAdapter<>();
    }
}

效果

在这里插入图片描述

打造适配RecyclerView的万能BaseAdapter 前言:上篇文章写了打造适配ListView的万能Adapter,有需要的请转:https://blog.csdn.net/fsx_xiaomei/article/details/88824907 ,今天来打造适配RecyclerView的万能BaseAdapter。 一、一般写法 RecyclerActivity(需要注意的是,RecyclerView一定要setLayoutManager,否则... 阅读详情

相关推荐

【Android】第三方库BaseRecyclerViewAdapterHelper的版本3版本2的差异学习

这个东西我也是在项目更新迭代的时候才第一次接触。收集相关资料,这是一个优秀的其中版本3是采用kt构建的:但是原来的项目是老版本的:那么我就想将原来的代码进行升级改造!想将这些老旧的代码升级为最新的3.0.7版。但是有遇到相关的问题,可能也不是咱的问题,也许是Android studio本身的问题。...

weixin_44002043的博客 3184

android viewholder继承,自定义ViewHolder 继承于BaseViewHolder 出现 ClassCastException异常...

java.lang.ClassCastException: com.chad.library.adapter.base.BaseViewHolder cannot be cast to org.redcross.data.common.CommonViewHolderat org.redcross.ui.activity.ItemListActivity$1.convert(ItemListAct...

weixin_36081486的博客 3037

Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife

最近发现这个项目好似迎来了第二春,GitHub上的StartFork增加的很快,我的猜测是学生在通过这个项目来学习完成自己的作业。随着Android版本的更新,Android Studio的更新,项目中一些内容不能在新版本中很好的使用,甚至出现编译不了的情况,这对我来说没啥,但是对于拿到项目满心欢喜的学生来说,运行不了,无疑是致命的,而我写在项目Readme下面我将演示一下怎么在本地运行这个项目的代码。

晨曦 6218

在Adapter中使用Holder的那些坑

使用GridView、ListView时,通常会在Adapter中采用Holder缓存每一项以提高效率,但如果没有用好Holder,这个缓存机制会导致许多意想不到的问题,结合自己的经验特地总结一下,以免今后再犯。 内容错乱   在Adapter的getView方法中通过position更新每一项的内容,对于根据判断条件给每一项设置属性的情况,每个判断条件下都需要给每一项的每个属性赋值,否则在

mingy的专栏 5991

1024程序节 Android框架之一 BRVAH【BaseRecyclerViewAdapterHelper使用demo

效果图》》》// 第二个布局添加自定义动画@NotNull@Override});默认执行一次,想要反复执行可以自行设置。记得这段要添加在MainActivity.java的adapter2 new出来之后,setAdapter之前空余时间别忘记了看看源码~~~

2401_89083049的博客 1193

[Android]下拉刷新上拉加载更多

SwipeRefreshLayout 是一个支持下拉刷新功能的布局,它是 Android Support Library 或 AndroidX 库的一部分。 BaseQuickAdapter 是一个来自开源库 BRVAH (Base RecyclerView Adapter Helper) 的功能丰富的适配器,用于简化 RecyclerView适配器实现。

Gamin 1221

zsh 隐藏用户名主机

修改 zshrc 推荐修改方式 vim ~/.zshrc # 重写 prompt_context prompt_context () {} # 也可以使用自定义提示符 prompt_context () { prompt_segment black default "hoo"; } 修改主题 不推荐直接修改主题,更新或者更换主题需...

weixin_34185364的博客 2348

BaseRecyclerViewAdapterHelper混淆问题

使用BaseRecyclerViewAdapterHelper中的 BaseDataBindingHolder并且开启混淆的时候 直接crash -keep public class * extends com.chad.library.adapter.base.viewholder.BaseViewHolder -keepclassmembers class **$** extends com.chad.library.adapter.base.viewholder.BaseViewHolde

chenjianbo的专栏 1742

开源框架BaseRecyclerViewAdapterHelper使用——RecyclerView万能适配器

前言 主要声明三点 第一: 关于本文的BaseRecyclerViewAdapterHelper用法,自然是转载的官方原文。或许有的人会很疑惑原文写的那么清除那么完善,为什么我还要写一篇几乎一模一样的?是为了蹭热度让更多的人关注?有更多的点击量?当然不是,我对这么虚伪的东西是非常不齿的。那么自然我有我的原因: 1、我自己其实是...

一条咸鱼 2269

BaseRecyclerViewAdapterHelper使用

原文:https://www.jianshu.com/p/9cf594d76975 对于RecyclerView, 我们重复编写着那一个又一个的列表界面,有的要分组,有的要添加广告头部、有的要不同类型item排列、等等需求,主要代码有大部分是重复的,如果有一个框架能够帮快速的解决各种需求,那该多好。 BRVAH是GitHub上一个强大的RecyclerAdapter框架,它能节约开发者大量的开...

zhaokai621的博客 3095

万能RecyclerView的数据适配器BaseRecyclerViewAdapterHelper

万能的RecyclerView的数据适配器,几行代码搞定数据适配器的创建,几行代码添加脚步局/头布局,彻底把RecyclerView转换成ListView进行使用, 一行代码轻松切换5种默认动画。还可以自定义动画, 上拉加载无需监听滑动事件,可自定义加载布局,显示异常提示,自定义异常提示。 随心定义分组头部。 自定义不同的item类型 简单配置、无需重写额外方法。 添加拖拽、滑动删除 开启,监听即可,就是这么简单。

趣学程序 9611

BaseRecyclerViewAdapterHelper的基本使用

MainActivity.java package com.zhoujian.basequickadapterdemo.activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutMan...

蓝枫 2798

安卓-混淆

##混淆 1.简单介绍 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读理解的形式的行为。 目的增加反编译的难度 2.集成过程 2.1 代码集成 Android Studio本身集成了ProGuard混淆工具,我们可以通过编辑app->build.gradle文件来开启混淆并且对代码进行压缩,对资源进行优化等。如下图 build...

zuochunsheng的博客 2447

RecyclerView使用BaseProviderMultiAdapter实现无限循环

RecyclerView使用BaseProviderMultiAdapter实现无限循环 主要使用BaseProviderMultiAdapter,BaseItemProvider实现无限循环,并且能点击button、item、左右无限循环滑动。

maoning20080808的专栏 884

Android---列表重构需求(1)BRVAH BaseMultiItemQuickAdapter多布局实现

这几天有个需求是来了新的设计图,重构租屋列表页,犹豫最近撸了个筛选框,然后列表页UI也变了,跟同事沟通后,建议我重构这个模块,在看完设计图后,我发现现在很多APP的列表页,都趋于多布局的情况 下面距离,懂球帝APP 这样看图,我们可以很明显的发列表item里面突然多了一个,广告或者别的类型的ITEM,如果你是电商模块 新闻模块可能更多不同样子的布局了,抛出第一个问题,如果是你,你会怎么去实现这个玩意 接下来 我们用图来深刻解释 从这个图可以看出来 这个列表 本来item子项里面都是.

binbin 2137

BaseQuickAdapter设置setOnItemClickListener报错

错误如下: java.lang.NoSuchMethodError: No virtual method getBindingAdapterPosition()I in class Lcom/chad/library/adapter/base/viewholder/BaseViewHolder; or its super classes (declaration of 'com.chad.library.adapter.base.viewholder.BaseViewHolder' appears in

qq_24351075的博客 3504

使用BaseQuickAdapter出现ClassCastException

使用BaseQuickAdapter出现ClassCastException

qq_41294019的博客 421
上一篇: 第七单元 Recyclerview的基本使用与封装
下一篇: 第九单元 ToolBar和DrawLayout和SlidingMenu
安久儿
博客等级 码龄7年 2粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值