All Projects → youlookwhat → Byrecyclerview

youlookwhat / Byrecyclerview

Licence: apache-2.0
🔥 RecyclerView 下拉刷新、加载更多、item点击/长按、头布局/尾布局/状态布局、万能分割线、Skeleton骨架图、极简adapter(RV/LV)等

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Byrecyclerview

Skeletonlayout
Skeleton view pattern for Android
Stars: ✭ 186 (-35.86%)
Mutual labels:  skeleton, recyclerview
Androidveil
🎭 An easy, flexible way to implement veil skeletons and shimmering effect for Android.
Stars: ✭ 792 (+173.1%)
Mutual labels:  skeleton, recyclerview
SimplifiedRecyclerview
An android library to help you get rid of boiler plate code when setting up Recyclerview
Stars: ✭ 19 (-93.45%)
Mutual labels:  recyclerview
Slim Api Skeleton
Slim 3 API skeleton project for Composer
Stars: ✭ 296 (+2.07%)
Mutual labels:  skeleton
Ngx Skeleton Loader
Make beautiful, animated loading skeletons that automatically adapt to your Angular apps
Stars: ✭ 278 (-4.14%)
Mutual labels:  skeleton
Tableview
TableView is a powerful Android library for displaying complex data structures and rendering tabular data composed of rows, columns and cells.
Stars: ✭ 2,928 (+909.66%)
Mutual labels:  recyclerview
Demo Recyclerviewenteranimation
Demo project for a blog post
Stars: ✭ 289 (-0.34%)
Mutual labels:  recyclerview
node-boilerplate
Node Typescript Boilerplate for Microservices. Skeleton for Node.js Apps written in TypeScript (with Setup Instructions for ESLint, Prettier, and Husky)
Stars: ✭ 92 (-68.28%)
Mutual labels:  skeleton
Project Stub
deps
Stars: ✭ 300 (+3.45%)
Mutual labels:  skeleton
Aiforms.settingsview
SettingsView for Xamarin.Forms
Stars: ✭ 274 (-5.52%)
Mutual labels:  recyclerview
Skeleton
Skeleton Android
Stars: ✭ 293 (+1.03%)
Mutual labels:  skeleton
Citypicker
🔥🔥🔥城市选择、定位、搜索及右侧字母导航,类似美团 百度糯米 饿了么等APP选择城市功能
Stars: ✭ 2,973 (+925.17%)
Mutual labels:  recyclerview
Transformerslayout
🔥 App金刚区导航菜单,类似淘宝、QQ音乐等APP导航,方格布局横向多行滑动翻页带滚动条
Stars: ✭ 258 (-11.03%)
Mutual labels:  recyclerview
Zephir
Zephir is a compiled high level language aimed to the creation of C-extensions for PHP.
Stars: ✭ 3,086 (+964.14%)
Mutual labels:  skeleton
SpannedGridLayoutManager
Android RecyclerView.LayoutManager that resizes and reorders views based on SpanSize
Stars: ✭ 522 (+80%)
Mutual labels:  recyclerview
Kiel
Kotlin way of building RecyclerView Adapter 🧩. You do not have to write RecyclerView Adapters again and again and suffer from handling of different view types. Kiel will help you.
Stars: ✭ 297 (+2.41%)
Mutual labels:  recyclerview
csharp-ddd-skeleton
🦈✨ C# DDD Skeleton: Bootstrap your new C# projects applying Hexagonal Architecture and Domain-Driven Design patterns
Stars: ✭ 67 (-76.9%)
Mutual labels:  skeleton
Android Pagination With Recyclerview
Pagination (Endless or Infinite Scrolling) using RecyclerView's onScrollListener
Stars: ✭ 269 (-7.24%)
Mutual labels:  recyclerview
Skeletonui
☠️ Elegant skeleton loading animation in SwiftUI and Combine
Stars: ✭ 275 (-5.17%)
Mutual labels:  skeleton
Cardslideview
一行代码实现ViewPager卡片效果,比ViewPager2更强大,底层同样是RecyclerView
Stars: ✭ 301 (+3.79%)
Mutual labels:  recyclerview

ByRecyclerView

jitpack Apache License 2.0 API

ByRecyclerView 提供了下拉刷新、加载更多、 添加HeaderView/FooterView、setStateView、item点击/长按、万能分割线、粘性header、极简Adapter(databinding)等功能。

功能特性

  • 1.支持 下拉刷新 / 加载更多
  • 2.可随意切换 自带下拉刷新布局 / SwipeRefreshLayout
  • 3.加载更多机制:不足一屏上拉加载,超过后触底加载
  • 4.可设置 自定义 下拉刷新布局 / 加载更多布局
  • 5.可Add HeaderView、FooterView
  • 6.可设置 StateView状态布局
  • 7.可添加 item及子view的点击/长按事件(防止重复点击)
  • 8.优化过的BaseAdapter (RV/LV),减少大量代码
  • 9.Adapter结合DataBinding使用 (RV/LV)
  • 10.可添加 万能分隔线(线性/宫格/瀑布流)
  • 11.可配置 Skeleton骨架图

最新:处理在ViewPager2中使用的问题

Document

Screenshots

下载试用

AndroidX版本(Apk-Demo)

如何使用 👉 Wiki文档

快速开始

1.先在 build.gradle 的 repositories 添加

allprojects {
	repositories {
		...
		maven { url "https://jitpack.io" }
	}
}

2.然后在dependencies添加

dependencies {
	// AndroidX版本引入
	implementation 'com.github.youlookwhat:ByRecyclerView:1.1.5'
}

3.在XML布局中引用 ByRecyclerView

<me.jingbin.library.ByRecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layoutManager="LinearLayoutManager"
    tools:listitem="@layout/item_main" />

4.使用BaseRecyclerAdapter

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(new BaseRecyclerAdapter<String>(R.layout.item_main, list) {
    @Override
    protected void bindView(BaseByViewHolder<String> holder, String bean, int position) {
        holder.setText(R.id.tv_text, bean);
    }
});

mAdapter.setNewData(list);   // 设置第一页数据

5.设置监听

// 下拉刷新监听
mRecyclerView.setOnRefreshListener(new ByRecyclerView.OnRefreshListener() {
            @Override
            public void onRefresh() {
                // 刷新完成
                mRecyclerView.setRefreshing(false);
            }
        });
// 加载更多监听
mRecyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() {
    @Override
    public void onLoadMore() {
         mAdapter.addData(list);            // 设置及刷新数据
         mRecyclerView.loadMoreComplete();  // 加载更多完成 
         mRecyclerView.loadMoreEnd();       // 没有更多内容了
         mRecyclerView.loadMoreFail();      // 加载更多失败,点击重试
    }
});

ItemDecoration

万能分割线,可给Linear/Grid/StaggeredGrid设置,并可配置去除不显示分割线的头部和尾部个数

1.给LinearLayout设置分割线

// 选择1:设置drawable
SpacesItemDecoration itemDecoration = new SpacesItemDecoration(this, SpacesItemDecoration.VERTICAL)
        .setNoShowDivider(1, 1)  // 第一个参数:头部不显示分割线的个数,第二个参数:尾部不显示分割线的个数,默认为1
        .setDrawable(R.drawable.shape_line);// 设置drawable文件

// 选择2:设置颜色、高度、间距等
SpacesItemDecoration itemDecoration = new SpacesItemDecoration(this, SpacesItemDecoration.VERTICAL)
        .setNoShowDivider(1, 1)
        // 颜色,分割线间距,左边距(单位dp),右边距(单位dp)
        .setParam(R.color.colorBlue, 10, 70, 70);

recyclerView.addItemDecoration(itemDecoration);

2.给宫格/瀑布流设置分割线

// 10:间距; true:距屏幕周围是否也有间距
GridSpaceItemDecoration itemDecoration = new GridSpaceItemDecoration(10, true)
        .setNoShowSpace(1, 1);// 第一个参数:头部不显示分割线的个数,第二个参数:尾部不显示分割线的个数,默认为1

recyclerView.addItemDecoration(itemDecoration);

add HeaderView/FooterView、setStateView

// 获取view对应databinding,注意:recyclerView.getParent()
LayoutHeaderViewBinding headerBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.layout_header_view, (ViewGroup) binding.recyclerView.getParent(), false);
recyclerView.addHeaderView(headerBinding.getRoot());

recyclerView.addFooterView(getView() / layoutId));
recyclerView.setStateView(getView() / layoutId);

// headerView、footerView、setStateView 支持一键隐藏,设置后需要notify
recyclerView.setHeaderViewEnabled(false);
recyclerView.setFootViewEnabled(false);
recyclerView.setStateViewEnabled(false);

Item 点击/长按监听

// 防重复点击使用 OnItemFilterClickListener
mRecyclerView.setOnItemClickListener(new ByRecyclerView.OnItemClickListener() {
    @Override
    public void onClick(View v, int position) {
        // 通过adapter获取对应position的数据
        DataItemBean itemData = mAdapter.getItemData(position);
    }
});
mRecyclerView.setOnItemLongClickListener(new ByRecyclerView.OnItemLongClickListener() {
    @Override
    public boolean onLongClick(View v, int position) {
        return false;
    }
});

// 添加 子View的点击/长按事件
holder.addOnClickListener(R.id.tv_text);
holder.addOnLongClickListener(R.id.tv_text);

// 防重复点击使用 OnItemChildFilterClickListener
recyclerView.setOnItemChildClickListener(new ByRecyclerView.OnItemChildClickListener() {
    @Override
    public void onItemChildClick(View view, int position) {
    }
});
recyclerView.setOnItemChildLongClickListener(new ByRecyclerView.OnItemChildLongClickListener() {
    @Override
    public void onItemChildLongClick(View view, int position) {
    }
});

设置 Item悬浮置顶

// 1、使用StickyLinearLayoutManager,传入adapter
StickyLinearLayoutManager layoutManager = new StickyLinearLayoutManager(getContext(), mAdapter);

// 2、在adapter里,将悬浮的item的ItemViewType设置为StickyHeaderHandler.TYPE_STICKY_VIEW
@Override
public int getItemViewType(int position) {
    if ("title".equals(getItemData(position).getType())) {
        return StickyHeaderHandler.TYPE_STICKY_VIEW;
    } else {
        return 2;
    }
}

设置Skeleton骨架图

1.设置item骨架图

// 显示
skeletonScreen = BySkeleton
        .bindItem(binding.recyclerView)
        .adapter(mAdapter)// 必须设置adapter,且在此之前不要设置adapter
        .shimmer(false)// 是否有动画
        .load(R.layout.layout_by_default_item_skeleton)// item骨架图
        .angle(30)// 微光角度
        .frozen(false) // 是否不可滑动
        .color(R.color.colorWhite)// 动画的颜色
        .duration(1500)// 微光一次显示时间
        .count(10)// item个数
        .show();

// 隐藏
skeletonScreen.hide();

2.设置view骨架图

// 显示
skeletonScreen = BySkeleton
        .bindView(binding.recyclerView)
        .load(R.layout.layout_skeleton_view)// view骨架图
        .shimmer(true)// 是否有动画
        .angle(20)// 微光角度
        .color(R.color.colorWhite)// 动画的颜色
        .duration(1500)// 微光一次显示时间
        .show();

// 隐藏
skeletonScreen.hide();

与BRVAH、XRecyclerView对比

ByRecyclerView BRVAH XRecyclerView
下拉刷新布局 继承基类自定义布局 只能简单设置样式
SwipeRefreshLayout 可配合使用 可配合使用 不能使用
加载更多布局 继承基类自定义布局 继承基类设置简单布局 继承基类自定义类
加载更多机制 不足一屏上拉加载,超过后触底加载 不足一屏即加载 触底加载
HeaderView 多ViewType区别 同一个item 多ViewType区别
FooterView 同一个item 同一个item 不能添加
EmptyView 可设置 可设置 不能设置
点击/长按事件

ByRecyclerView 是XRecyclerView的拓展,可完全替换XRecyclerView,对于BRVAH它的特点在于:

  • headerView使用的是多type的形式,即一个header就是一个position
  • 不足一屏上拉加载,超过后触底加载
  • 自带下拉加载布局,也可使用三方刷新框架,比如SwipeRefreshLayout
  • 万能分割线(LinearLayout / GridLayout / StaggeredGridLayout)
  • 可设置悬浮置顶item StickyView
  • 可设置Skeleton 骨架图

缺点是还没有BRVAH里的部分功能,比如分组adapter、DiffUtils、item扩展动画...后期会逐步完善。

混淆

此资源库没有使用到任何序列化、反序列化、JNI、反射,无需进行额外的混淆操作,并且已经测试通过,在实际项目中使用,如果你在项目混淆之后出现问题,请及时联系我。

Issues

如果有任何问题,请到GitHub的issue处写上你不明白的地方,也可以通过下面提供的方式联系我,我会及时给予帮助。如果此库帮助到了你,欢迎点个star,非常感谢!

Thanks

About me

License

Copyright (C) 2016 Bin Jing

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].