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

// GridLayoutManager gridLayoutManager=new GridLayoutManager(this,4);
// recyclerView.setLayoutManager(gridLayoutManager);

    //创建适配器
    adapter = new myAdapter(R.layout.item, datas);
    adapter2=new youAdapter(R.layout.grid_item,pictureData);

// adapter2.setAdapterAnimation(new BaseAnimation() {
// @NotNull
// @Override
// public Animator[] animators(@NotNull View view) {
// return new Animator[0];
// }
// });

    // 注册子控件点击事件的 button控件按钮
    adapter.addChildClickViewIds(R.id.button);
    adapter2.addChildClickViewIds(R.id.img,R.id.tV);
    // item 点击监听
    adapter.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(@NonNull @NotNull BaseQuickAdapter<?, ?> adapter, @NonNull @NotNull View view, int position) {
            Toast.makeText(MainActivity.this, "你点击了第" + (position + 1) + "条信息", Toast.LENGTH_SHORT).show();
        }
    });

    // item长按监听
    adapter.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) {
            Toast.makeText(MainActivity.this, "你长按了第" + (position + 1) + "条信息", Toast.LENGTH_SHORT).show();
            return false;
        }
    });

    // Listview 中item的点击事件监听
    adapter.setOnItemChildClickListener(new OnItemChildClickListener() {
        @Override
        public void onItemChildClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) {
            Toast.makeText(MainActivity.this, "你点击了" + (position + 1) + "button按钮", Toast.LENGTH_SHORT).show();
        }
    });


    // 两个 adapter2 事件
    adapter2.setOnItemChildClickListener(new OnItemChildClickListener() {
        @Override
        public void onItemChildClick(@NonNull @NotNull BaseQuickAdapter adapter, @NonNull @NotNull View view, int position) {
            switch (view.getId()){
                case R.id.img:
                    Toast.makeText(MainActivity.this,"你点击了"+(position+1)+"图片",Toast.LENGTH_SHORT).show();
                    break;

                case R.id.tV:
                    Toast.makeText(MainActivity.this,"你点击了"+(position+1)+"文字",Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    });


    //给RecyclerView设置适配器
    recyclerView.setAdapter(adapter);
    recyclerView2.setAdapter(adapter2);

    adapter.notifyDataSetChanged();
}

}




---


### 🍄🍄Person.java【Person对象类】



package com.example.domain;

public class Person {
public int id;
public String name;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}




---


### 🍄🍄Pictures.java【Picture对象类】



package com.example.domain;

public class Pictures {
int id;
String name;
public int getId() {
return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}




---




---


## 🍓🍓BRVAH 下部




---


### 🍎🍎自定义动画


**`效果图》》》`**



// 第二个布局添加自定义动画
adapter2.setAdapterAnimation(new BaseAnimation() {
@NotNull
@Override
public Animator[] animators(@NotNull View view) {
return new Animator[]{
ObjectAnimator.ofFloat(view, “scaleY”, 1, 0.1f, 1),
ObjectAnimator.ofFloat(view, “scaleX”, 1, 0.1f, 1)
};
}
});



> 
> **默认执行一次,想要反复执行可以自行设置。记得这段要添加在MainActivity.java的adapter2 new出来之后,setAdapter之前**  
>  **`空余时间别忘记了看看源码`~~~**  
>  ![在这里插入图片描述](https://img-blog.csdnimg.cn/0f76fb04ec8b4a04bd37a93263c8f3d1.png)
> 
> 
> 




---


### 🍎🍎空布局


**`说明:当adapter中数据不为空时,空布局不会生效`**



> 
> **通过设置View为空布局  
>  代码如下:**
> 
> 
> 



View view = …
adapter.setEmptyView(view);



> 
> **通过设置LayoutResId为空布局  
>  代码如下:**
> 
> 
> 



adapter.setEmptyView(R.layout.loading_view);



> 
> **设置是否使用空布局(默认为true)  
>  代码如下:**
> 
> 
> 



// java
adapter.setUseEmpty(false);

// kotlin
adapter.isUseEmpty = false




---


### 🍎🍎头部



> 
> **`说明:此头部并不是item的头部,而是整个Adapter的头部`**  
>  **代码如下:**
> 
> 
> 



View view = …;
adapter.addHeaderView(view);

// 指定添加位置
adapter.addHeaderView(view, 1);

// 替换头部
adapter.setHeaderView(view);
//替换指定位置头部
adapter.setHeaderView(view, 0);

// 移除头部
adapter.removeHeaderView(view);
// 移除全部头部
adapter.removeAllHeaderView();




---


### 🍎🍎头部



> 
> `说明:此脚部不是item的脚部,而是整个Adapter的`  
>  **代码如下:**
> 
> 
> 



View view = …;
adapter.addFooterView(view);

// 指定添加位置
adapter.addFooterView(view, 1);

// 替换脚部
adapter.setFooterView(view);
//替换指定位置脚部
adapter.setFooterView(view, 0);

// 移除脚部
adapter.removeFooterView(view);
// 移除全部脚部
adapter.removeAllFooterView();




---


**是不是还是不太尽兴,那就来看看Github的详细解释吧。**  
 [BaseRecyclerViewAdapterHelper]( ) **使用详情页**


**`BaseQuickAdapter主要属性、方法说明`**




| 空 | Java | Kotlin | 说明 |
| --- | --- | --- | --- |
| 获取Context | getContext() | context |  |
| **数据相关** |  |  |  |
| 获取Adapter中数据 | getData() | data | 只能get |
| 设置新的数据实例 | setNewData() | setNewData() | 将会替换List指针引用 |
| 添加数据 | addData() | addData() |  |
| 移除数据 | remove() | remove() |  |
| 改变某一位置的数据 | setData() | setData() |  |
| 替换整个数据 | replaceData() | replaceData() | 不会更改原数据的引用 |
| 设置Diff数据(异步,推荐) | setDiffCallback() | setDiffCallback() | 配置数据差异化比较的Callback |
| ~ | setDiffConfig() | setDiffConfig() | 更高程度的自定义化配置 |
| ~ | setDiffNewData(List) | setDiffNewData(List?) | 必须先设置setDiffCallback() 或者 setDiffConfig(),否则不生效 |
| 设置Diff数据 | setDiffNewData(DiffResult, List) | setDiffNewData(DiffResult, List?) | 通过DiffResult设置数据,Adapter内部不关心Diff过程,只要结果。 |
| **空布局** |  |  |  |
| 设置空布局视图 | setEmptyView() | setEmptyView() | 仅当 data 为空时,才会显示 |
| 是否有空视图 | hasEmptyView() | hasEmptyView() |  |
| 获取空视图 | getEmptyLayout() | getEmptyLayout() |  |
| 是否使用空布局 | setUseEmpty() | isUseEmpty |  |
| **头布局** |  |  |  |
| 添加头布局 | addHeaderView() | addHeaderView() |  |
| 设置头布局 | setHeaderView() | setHeaderView() |  |
| 是否有头布局 | hasHeaderLayout() | hasHeaderLayout() |  |
| 移除头布局 | removeHeaderView() | removeHeaderView() |  |
| 移除所有头布局 | removeAllHeaderView() | removeAllHeaderView() |  |
| **脚布局** |  |  |  |
| 添加脚布局 | addFooterView() | addFooterView() |  |
| 设置脚布局 | setFooterView() | setFooterView() |  |
| 是否有脚布局 | hasFooterLayout() | hasFooterLayout() |  |
| 移除脚布局 | removeFooterView() | removeFooterView() |  |
| 移除所有脚布局 | removeAllFooterView() | removeAllFooterView() |  |
| **布局其他属性** |  |  |  |
| 当显示空布局时,是否显示 头布局 | setHeaderWithEmptyEnable() | headerWithEmptyEnable |  |
| 当显示空布局时,是否显示 脚布局 | setFooterWithEmptyEnable() | footerWithEmptyEnable |  |
| **点击事件** |  |  |  |
| item点击事件 | setOnItemClickListener() | 同java |  |
| item长按事件 | setOnItemLongClickListener | 同java |  |
| item子view的点击事件 | setOnItemChildClickListener | 同java |  |
| item子view的长按事件 | setOnItemChildLongClickListener | 同java |  |
| 添加需要响应点击事件的子View id | addChildClickViewIds() | 同java | 添加以后,setOnItemChildClickListener才会响应 |
| 添加需要响应长按事件的子View id | getChildLongClickViewIds() | 同java |  |
| **动画** |  |  |  |
| 是否打开动画 | setAnimationEnable() | animationEnable | 默认:false |
| 动画是否仅第一次执行 | setAnimationFirstOnly() | isAnimationFirstOnly |  |
| 设置自定义动画 | setAdapterAnimation() | adapterAnimation |  |
| 设置使用内置默认动画 | setAnimationWithDefault() | setAnimationWithDefault() | 参数为枚举 |





![img](https://img-blog.csdnimg.cn/img_convert/9f1dea0294d799d8535d03edbf2a353a.png)
![img](https://img-blog.csdnimg.cn/img_convert/03ac0b8d6b0c8deb8aa4fd90a4f37aa9.png)
![img](https://img-blog.csdnimg.cn/img_convert/0228b0c5c8e1cd9dc08ca5bf3de17011.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

动画是否仅第一次执行 | setAnimationFirstOnly() | isAnimationFirstOnly |  |
| 设置自定义动画 | setAdapterAnimation() | adapterAnimation |  |
| 设置使用内置默认动画 | setAnimationWithDefault() | setAnimationWithDefault() | 参数为枚举 |





[外链图片转存中...(img-MHug3fK4-1725715051749)]
[外链图片转存中...(img-cY9iDzxk-1725715051750)]
[外链图片转存中...(img-tBoff0ag-1725715051750)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值