BaseRecyclerAdapter之添加不同布局(头部尾部)

最近写了个Android开源库「BaseRecyclerViewAdapterHelper」集成了很多常见需求的解决方案,希望大家多多star哦~!

效果如何?

如何使用?

多个不同布局

public class MultipleItemAdapter extends BaseQuickAdapter<String> {
    private final int TEXT_TYPE = 1;
    private int mTextLayoutResId;
   public MultipleItemAdapter(Context context, List data, int... layoutResId) {
        super(context, layoutResId[0], data);
        mTextLayoutResId = layoutResId[1];
    }
    @Override
    protected int getDefItemViewType(int position) {
        if (position % 2 == 0)
            return TEXT_TYPE;
        return super.getDefItemViewType(position);
   }
   @Override
    protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TEXT_TYPE)
            return new TextViewHolder(getItemView(mTextLayoutResId, parent));
        return super.onCreateDefViewHolder(parent, viewType);
    }
    @Override
    protected void onBindDefViewHolder(BaseViewHolder holder, String item) {
        if (holder instanceof TextViewHolder)
            holder.setText(R.id.tv, item);
   }
    @Override
    protected void convert(BaseViewHolder helper, String item) {
        helper.setImageUrl(R.id.iv, item);
    }
    public class TextViewHolder extends BaseViewHolder {
        public TextViewHolder(View itemView) {
            super(itemView.getContext(), itemView);
        }
    }
}

添加头部尾部

mQuickAdapter.addHeaderView(getView());
mQuickAdapter.addFooterView(getView());

原理分析

如果需要定义多个不同类型的布局,需要知道以下几点:

- 重写getItemViewType()方法,根据需求规则给出不同的type值。

- 在onCreateViewHolder()方法里面根据不同的type来创建不同的ViewHolder

- 在onBindViewHolder()里面根据不同holder的类型来赋予相对于的数据

- 如果有额外布局(如:头部尾部)需要修改getItemCount()方法的返回数量

多个不同的布局的实现(三部曲)

1.重写了getDefItemViewType()方法,其实也就是父类的getItemViewType()里面的方法,如上所说,根据页面需求,做出规则,因为上面的UI是一个TextView一个ImageView交替的来,所以就写了个这样规则的 if (position % 2 == 0)保证他们交替着显示。

2.type搞定了,接下来就是调用onCreateDefViewHolder()了,根据上面的type来创建不同的ViewHolder,

3.然后再接下来调用onBindDefViewHolder(),根据上面创建的ViewHolder的类型不同来进行相应的赋值。

添加头部和尾部(额外布局)

在上面的基础之上再重写getItemCount()在原本数据量上加上根据额外布局的数量,代码如下

@Override

public int getItemCount() {

int i = mNextLoadEnable ? 1 : 0;

return mData.size() + i + getHeaderViewsCount() + getFooterViewsCount();

}

注意:如果是添加头部

那就必须在原onBindViewHolder()里面position-头部数量,因为不减去的话,那么数据就会从第二条开始遍历,所以要注意!

int index = position - getHeaderViewsCount();
convert(baseViewHolder, mData.get(index));

意外收获

国际友人的加盟!

每次收获一点点,后续还会扩展更多功能,供大家使用及学习「BaseRecyclerViewAdapterHelper」。

时间: 2024-12-06 10:47:34

BaseRecyclerAdapter之添加不同布局(头部尾部)的相关文章

BaseRecyclerAdapter之添加不同布局(优化篇)

由于之前发了篇「BaseRecyclerAdapter之添加不同布局(头部尾部)」收到了以下反馈,在此非常感谢,宝贵建议!希望加群多多提建议,让这个项目更加好用,帮助到更多人. 目前已优化:「GitHub源码地址」 效果如何? 优化前: public class MultipleItemAdapter extends BaseQuickAdapter<String> { private final int TEXT_TYPE = 1; private int mTextLayoutResId;

手把手教你给RecycleView添加头布局和尾布局

RecycleView想必大家都不陌生,它已他的高拓展性取代了传统布局显示,同时配合协调布局,可以实现很多意想不到的酷炫交互,今天就和大家介绍一下,如何给RecycleView添加头布局和尾布局,同时你也可以通过自己的拓展实现更多复杂的布局. 首先我们先看一下效果: 实现头部尾部布局其实方法还是很多,这里我推荐使用Adapter设置itemType来做,那么问题来了,为什么这么做呢?因为拓展性更强,并且更加解耦.将逻辑都写在adapter中,比起写在activity中管理起来也更加方便. 首先,

ExtraViewWrapperAdapter--添加额外头部尾部功能的装饰adapter

目录 目录 概述 关于头部和尾部 分离原始数据及装饰数据 headerView与footerView的创建与显示 使用唯一的标签 关于headerView与FooterView位置的计算 头部尾部的判断方式 与HeaderRecycleAdapter的接口相关 其它 使用方式 GitHub地址 示例图片 概述 对于ListView有自带的方法添加headerView及footerView,但是RecycleView仅仅只是维护缓存的View,本身并不处理内容显示,都交给了RecycleView.

Android开发之ListView添加多种布局效果演示

在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断,指定ListView列表中指定位置的item加载对应的布局,在 getView中返回对应的视图,之前由于不清楚getViewTypeCount()和getItemViewType()方法,使用得比较少,一直以 为需要添加多个适配器,现在看来当时的想法说明自己见识还不够,哈哈. 第一步:创建放置Li

ListView添加头布局和脚布局

 ListView添加头布局和脚布局 之前学习喜马拉雅的时候做的一个小Demo,贴出来,供大家学习参考: 如果我们当前的页面有多个接口.多种布局的话,我们一般的选择无非就是1.多布局:2.各种复杂滑动布局外面套一层ScrollView(好low):3.头布局脚布局.有的时候我们用多布局并不能很好的实现,所以头布局跟脚布局就是我们最好的选择了:学过了ListView的话原理很简单,没啥理解的东西,直接贴代码了: 效果图:                   正文部分布局: fragment_cla

页面内容小于一屏时仍能头部在头部尾部在尾部

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>页面内容小于一屏时仍能头部在头部尾部在尾部</title> <style> *{ padding:0; margin:0; text-align:center; } /* html, body {height: 100%;}*/ header{

Android添加百分比布局库时显示Failed to resolve: com.android.support.percent:问题

这是看第一行代码中遇到的问题,要添加百分比布局库的依赖时要在app下的bulid.gradle添加以下代码 implementation fileTree(dir:'libs',include:['*.jar'])implementation 'com.android.support:appcompat-v7:28.0.0'implementation 'com.android.support:percent:28.0.0' testCompile 'junit:junit:4.12' 注意这一

可添加头部尾部RecyclerView,很帅哦~

WrapRecyclerView 是一个可以添加头部和尾部的RecyclerView,并且提供了一个 WrapAdapter, 它可以让你轻松为 RecyclerView 添加头部和尾部. 示例中轮转图使用了Android-LoopView,使用它你可以轻松实现轮转大图. 是不是很心动?那么抓紧来star or fork吧! GitHub地址: WrapRecyclerView Android-LoopView https://github.com/xuehuayous/WrapRecycler

phpcms后台管理基本操作(头部尾部的替换)

phpcms是一款非常便捷的网站管理软件,从网上下载好软件后放在wamp的www目录下,然后通过路径一步步安装就好了.数据库要写上自己数据库的名字和密码,如果没有密码则不写,登录后就是这个后台页面: 1.要做网站的话注意两个文件夹,phpcms里的templates是放自己新建的模板,在模板文件夹下建一个content子文件,把写好的html文件都放在content里边并且修改名字.statics里要放自己写的css.js.images,最好分门别类的放在各自的文件夹里. 2.创建好文件后回到后