Adapter库实现列表分组显示
立即下载
金额: 3 元
支付方式:
友情提醒:源码购买后不支持退换货
立即支付
发布时间:2019-07-08
概述
简洁,明了的方式实现列表数据分组显示,以帮大家解决实际开发中遇到的此类问题。
详细
###前言
之前我写过一篇关于 Brvah,这个强大 adpter 框架的简单介绍,但也只是简单的介绍,很多关于它的重要使用方法都没来得及介绍。那么今天我们就来讲 Brvah 实现的一个重要功能,及列表数据分组显示。
今天涉及的内容有:
1. Brvah 库依赖
2. 数据单体的实现
3. 列表数据在 MainActivity 中的使用
4. 涉及相关布局代码
5. 效果图和项目结构图
先来波效果图:
![](/contentImages/image/20190708/2eZereRQ65jb4QiVFk8.gif)
####一.Brvah 库依赖
在你项目的project对应的build.gradle中添加如下代码:
```
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
```
然后在你的app_module对应的build.gradle中添加如下引用:
```
dependencies {
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46'
}
```
####二. 数据单体的实现
实现数据列表分组显示的话,我们放在列表中的对象要继承SectionEntity,例如我们要写一个Person的列表分组功能,那么对象Person则需要继承SectionEntity,Person具体代码如下:
```
package com.example.entity;
import com.chad.library.adapter.base.entity.SectionEntity;
/**
* Description:
*
* Author:pei
* Date: 2019/7/6
*/
public class Person extends SectionEntity {
private String name;
private int age;
private int type;
public Person(boolean isHeader, String header) {
super(isHeader, header);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", type=" + type +
'}';
}
}
```
以上Person必须实现的一个构造方法是:
```
public Person(boolean isHeader, String header) {
super(isHeader, header);
}
```
其中,当 isHeader 为true时,表示这个Person是用来做分组的标题的,分组标题要显示的内容,可以放到 String header 参数上。当isHeader =false,表示这个Person是分组里面具体的item项。
####三.列表数据在 MainActivity 中的使用
我写了一个适配器GroupAdapter ,此类用于具体显示列表中的内容。分组列表显示的具体代码写在MainActivity中,下面贴出MainActivity的具体代码:
```
public class MainActivity extends AppActivity {
@BindView(R.id.tv_text)
TextView mTvText;
@BindView(R.id.btn_confirm)
Button mBtnConfirm;
@BindView(R.id.rv)
RecyclerView mRecyclerView;
private ListmList;
private GroupAdaptermGroupAdapter;
@Override
public int getContentViewId() {
return R.layout.activity_main;
}
@Override
public void initData() {
mBtnConfirm.setText("重置");
mList=new ArrayList<>();
Person p0=new Person(true,"学生");
Person p1=new Person(false,null);
p1.setName("小明");
p1.setAge(10);
Person p2=new Person(false,null);
p2.setName("小放");
p2.setAge(12);
Person p3=new Person(false,null);
p3.setName("小黄");
p3.setAge(14);
Person p4=new Person(true,"老师");
Person p5=new Person(false,null);
p5.setName("王老师");
p5.setAge(28);
Person p6=new Person(false,null);
p6.setName("张老师");
p6.setAge(30);
Person p7=new Person(false,null);
p7.setName("李老师");
p7.setAge(29);
mList.add(p0);
mList.add(p1);
mList.add(p2);
mList.add(p3);
mList.add(p4);
mList.add(p5);
mList.add(p6);
mList.add(p7);
mGroupAdapter=new GroupAdapter<>(R.layout.item_group_adapter,R.layout.item_group_adapter_header,mList);
LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
layoutManager.setSmoothScrollbarEnabled(true);
layoutManager.setAutoMeasureEnabled(true);
mRecyclerView.setNestedScrollingEnabled(false);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(mGroupAdapter);
}
@Override
public void setListener() {
mBtnConfirm.setOnClickListener(this);
}
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.btn_confirm:
testCache();
break;
default:
break;
}
}
private void testCache(){
mTvText.setText("oop");
}
}
```
####四.涉及相关布局代码
#####4.1 MainActivity对应布局activity_main.xml代码如下
```
```
#####4.2 分组显示的头部布局item_group_adapter_header.xml代码如下
```
```
#####4.3 分组显示的item布局item_group_adapter.xml代码如下
```
```
####五.效果图和项目结构图
效果图
![](/contentImages/image/20190708/2eZereRQ65jb4QiVFk8.gif)
项目结构图
![](/contentImages/image/20190708/Wl5qX1iwoeFKIPl8wFY.png)