# RefreshRecyclerView
**Repository Path**: shiger/RefreshRecyclerView
## Basic Information
- **Project Name**: RefreshRecyclerView
- **Description**: from https://github.com/zhazhaxin/RecyclerView
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-05-08
- **Last Updated**: 2023-05-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 字节跳动 内推
### 抖音/番茄小说 Android/ios 急招,有其他岗位或者要求可以邮件私聊
欢迎发送简历到 1399750010@qq.com
# RefreshRecyclerView
- RecyclerAdapter : 支持下拉刷新,上拉加载,添加Header,Footer
- MultiTypeAdapter/CustomMultiTypeAdapter : 针对 复杂数据类型列表 展示Adapter
**注意**
所有的 adapter 可以配合任意的 RecyclerView 或者 它的子类 使用,而不是仅仅局限于 RefreshRecyclerView 这个组件。
## 使用方法
- gradle依赖
```
compile 'cn.lemon:RefreshRecyclerView:2.0.0'
compile 'com.android.support:recyclerview-v7:25.4.0'
```
- xml布局文件
```xml
```
- java代码
```java
mRecyclerView = (RefreshRecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setSwipeRefreshColors(0xFF437845,0xFFE44F98,0xFF2FAC21);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.addRefreshAction(new Action() {
@Override
public void onAction() {
// TODO:刷新数据
}
});
mRecyclerView.addLoadMoreAction(new Action() {
@Override
public void onAction() {
// TODO:加载更多
}
});
mRecyclerView.addLoadMoreErrorAction(new Action() {
@Override
public void onAction() {
// TODO:加载更多错误,点击重新加载
}
});
```
```java
// Header 和 Footer 支持
mAdapter.setHeader(textView);
mAdapter.setFooter(footer);
```
### RecyclerAdapter
> 针对相同数据类型列表,可添加 Header,Footer
自定义 Adapter 应该继承 RecyclerAdapter,如:
```java
class CardRecordAdapter extends RecyclerAdapter {
public CardRecordAdapter(Context context) {
super(context);
}
@Override
public BaseViewHolder onCreateBaseViewHolder(ViewGroup parent, int viewType) {
return new CardRecordHolder(parent);
}
}
```
### MultiTypeAdapter
> 复杂数据类型列表的 Adapter,没有 Header,Footer 的概念,每个 Item 对应一个 ViewHolder
> 注意:通过反射实现,支持 ViewHolder 的带有一个参数(ViewGroup)和无参两种形式构造函数,性能方面微小的损耗。
> 构造函数为保证反射时能获取到,应该写成 public 静态内部类 或者 public 的单独类。
```
private MultiTypeAdapter mAdapter = new MultiTypeAdapter(this);
mAdapter.add(ImageViewHolder.class, getImageVirtualData());
mAdapter.addAll(TextViewHolder.class, getTextVirtualData());
mAdapter.addAll(TextImageViewHolder.class, getTextImageVirualData());
mAdapter.addAll(CardRecordHolder.class, getRecordVirtualData());
```
### CustomMultiTypeAdapter (推荐使用)
> 功能和 MultiTypeAdapter 一样,但避免了反射带来的弊端,需要实现 IViewHolderFactory 接口类来管理viewtype 和 ViewHolder 的映射关系。
```java
// 映射 viewtype 和 ViewHolder
@Override
public V getViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case VIEW_TYPE_TEXT:
return (V) new TextViewHolder(parent);
case VIEW_TYPE_IAMGE:
return (V) new ImageViewHolder(parent);
case VIEW_TYPE_TEXT_IMAGE:
return (V) new TextImageViewHolder(parent);
case VIEW_TYPE_CARD:
return (V) new CardRecordHolder(parent);
default:
return (V) new TextViewHolder(parent);
}
}
// 绑定数据
mAdapter.add(getImageVirtualData(), VIEW_TYPE_IAMGE);
mAdapter.addAll(getTextVirtualData(), VIEW_TYPE_TEXT);
mAdapter.addAll(getTextImageVirualData(), VIEW_TYPE_TEXT_IMAGE);
mAdapter.addAll(getRecordVirtualData(), VIEW_TYPE_CARD);
```
### ViewHolder
> 自定义 ViewHolder 需继承 BaseViewHolder,如:
```java
class CardRecordHolder extends BaseViewHolder {
//当使用MultiTypeAdapter时,务必加上此构造方法
public CardRecordHolder(ViewGroup parent) {
super(parent, R.layout.holder_consume);
}
@Override
public void setData(Consumption object) {
super.setData(object);
name.setText("Demo");
//UI绑定数据
}
@Override
public void onInitializeView() {
super.onInitializeView();
name = findViewById(R.id.name);
//初始化View
}
@Override
public void onItemViewClick(Consumption object) {
super.onItemViewClick(object);
//点击事件
}
}
```
[详细用法请看Demo](https://github.com/llxdaxia/RecyclerView/tree/master/demo)
