翻翻git之---利用RecyclerView实现折叠效果 SectionedExpandableGridRecyclerView

简介:

转载请注明出处:王亟亟的大牛之路

今天也没有P1,因为年前酱油打多了,事情堆积到现在有点紧迫感了,快点给观众老爷上完聊我就去做事了!!


今天上的是一个可折叠的RecyclerView SectionedExpandableGridRecyclerView(名字好长)

先上下效果图:

这里写图片描述

因为是RecyclerView 那这些点击、折叠都是自己写的事件了,所以还是感谢作者!!!

how to use?

因为原作者没有做 jcenter下载那么我们就只能 把代码和资源文件都Copy进去了

这里写图片描述

这些都弄进去

那来看看是怎么使用的,把创建,初始化,调用这些事好好瞅瞅。

看看使用这个控件要传些什么

public SectionedExpandableLayoutHelper(Context context, RecyclerView recyclerView, ItemClickListener itemClickListener,int gridSpanCount)

需要传4个参数分别为:

Context context 上下文对象

RecyclerView recyclerView 控件容器对象

ItemClickListener itemClickListener 点击事件对象

int gridSpanCount 每行显示多少个Item

上面的GIF gridSpanCount传入的是3,再贴个传入2的给大家看看

这里写图片描述

对了再说下XML的引用

 <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler_view"/>

只是当普通的RecyclerView使用就好了

那数据源怎么操作呢?

 ArrayList<Item> arrayList = new ArrayList<>();
        arrayList.add(new Item("iPhone", 0));
        arrayList.add(new Item("iPad", 1));
        arrayList.add(new Item("iPod", 2));
        arrayList.add(new Item("iMac", 3));
        sectionedExpandableLayoutHelper.addSection("Apple Products", arrayList);

作者对数据层进行了一定封装,使得setAdapter()的操作,并不在我们的业务层出现。

而是在控件初始化时进行了设置(不过这时候数据集合是空的)

 public SectionedExpandableLayoutHelper(Context context, RecyclerView recyclerView, ItemClickListener itemClickListener,
                                           int gridSpanCount) {

        //setting the recycler view
        GridLayoutManager gridLayoutManager = new GridLayoutManager(context, gridSpanCount);
        recyclerView.setLayoutManager(gridLayoutManager);
        mSectionedExpandableGridAdapter = new SectionedExpandableGridAdapter(context, mDataArrayList,
                gridLayoutManager, itemClickListener, this);
        recyclerView.setAdapter(mSectionedExpandableGridAdapter);
    }

然后在notifyDataSetChanged()时进行数据的刷新(无论是主动还是被动都是在这操作)

反正你如果数据发横了变化 记得刷一刷 notifyDataSetChanged()

栏目的监听走这

@Override
    public void itemClicked(Item item) {
        Toast.makeText(this, "Item: " + item.getName() + " clicked", Toast.LENGTH_SHORT).show();
    }

每一个Item的监听走这

 @Override
    public void itemClicked(Section section) {
        Toast.makeText(this, "Section: " + section.getName() + " clicked", Toast.LENGTH_SHORT).show();
    }

这两个事件的set方法都省去了,因为构造函数里已经做了这事,当然如果你不需要,那么久空着吧。

源码地址:https://github.com/ddwhan0123/SectionedExpandableGridRecyclerView/archive/master.zip

作者git:https://github.com/bpncool/SectionedExpandableGridRecyclerView

目录
相关文章
|
开发工具 git C++
Git 进阶系列 | 3. 基于 Pull Request 实现更好的协作
Git 进阶系列 | 3. 基于 Pull Request 实现更好的协作
249 0
Git 进阶系列 | 3. 基于 Pull Request 实现更好的协作
|
网络安全 开发工具 数据安全/隐私保护
Git 实现连接 Github 远程仓库、拉取、推送本地文件
本地写的代码想推送到 Github 上面,可以借助 Git 命令实现,总结起来简单好用,阅读教程之前请确保你已经安装好 Git 软件;
|
前端开发 安全 jenkins
Postman+Newman+Git+Jenkins实现接口自动化测试持续集成
做接口测试的话,首先要考虑的是如何选择一个合适的工具?在忽略工具是否好用,是否能满足业务要求的前提下,需要考虑以下2点: 1、要考虑工具的学习成本 2、要考虑团队的协作
Postman+Newman+Git+Jenkins实现接口自动化测试持续集成
|
Linux 开发工具 git
【Linux】搭建Git后使用钩子实现代码自动部署
【Linux】搭建Git后使用钩子实现代码自动部署
311 0
【Linux】搭建Git后使用钩子实现代码自动部署
|
Linux 网络安全 开发工具
Linux:expect实现自动拉取git代码
Linux:expect实现自动拉取git代码
674 0
|
缓存 开发工具 git
IntelliJ IDEA绑定GitHub实现代码版本控制实例演示,IDEA上传、更新、同步项目到GitHub演示,Git的下载与安装
IntelliJ IDEA绑定GitHub实现代码版本控制实例演示,IDEA上传、更新、同步项目到GitHub演示,Git的下载与安装
435 0
IntelliJ IDEA绑定GitHub实现代码版本控制实例演示,IDEA上传、更新、同步项目到GitHub演示,Git的下载与安装
|
网络安全 开发工具 数据安全/隐私保护
Git 技术篇 - 本地Git绑定GitHub实现代码云寄存实例演示
Git 技术篇 - 本地Git绑定GitHub实现代码云寄存实例演示
352 0
Git 技术篇 - 本地Git绑定GitHub实现代码云寄存实例演示
|
架构师 IDE 测试技术
Git设置分支保护实现CodeReview卡点
GIT是一个分布式版本控制系统的软件,主要用来控制代码的版本。所谓分布式也就是每一个git的客户端都有一份完成的代码库,这样如果中央服务器出现问题,代码也会在各个开发者的电脑上有备份。(本文以下内容以GitLab为例)
654 0
Git设置分支保护实现CodeReview卡点
|
开发工具 git Python
Google 开源的 Python 命令行库:fire 实现 git 命令
涉及的示例代码和历史文章,已同步更新到 HelloGitHub-Team 仓库 一、前言 在前面三篇介绍 fire 的文章中,我们全面了解了 fire 强大而不失简洁的能力。按照惯例,我们要像使用 argparse、docopt 和 click 一样使用 fire 来实现 git 命令。 本文的关注点并不在 git 的各种命令是如何实现的,而是怎么使用 fire 去打造一个实用命令行程序,代码结构是怎样的。因此,和 git 相关的操作,将会使用 gitpython 库来简单实现。 为了让没读过 使用 xxx 实现 git 命令(xxx 指 argparse、docopt 和 click)
196 0