FamiliarRecyclerView

Introduction: 一个如你熟悉 ListView、GridView 一样熟悉的 RecyclerView
More: Author   ReportBugs   
Tags:
RecyclerView-

@iwgang

这是一个如你熟悉 ListView、GridView 一样熟悉的 RecyclerView 类库,你可以用以前使用 ListView / GridView 的习惯来使用 RecyclerView,这些可让你将项目原有的 ListView / GridView / 瀑布流 迁移到 RecyclerView 时减少许多工作量.

效果图

gradle

// androidx
implementation 'com.github.iwgang:familiarrecyclerview:1.3.5'

// android.support
implementation 'com.github.iwgang:familiarrecyclerview:1.3.4'

这些是不是很熟悉?

// 添加/删除 头部 View (支持多个)
mRecyclerView.addHeaderView() 和 .removeHeaderView()

// 添加/删除 底部 View (支持多个)
mRecyclerView.addFooterView() 和 .removeFooterView()

// 设置分割线(也可以在布局文件中直接指定分割线 Divider 及分割线大小,当然你也可以使用自己的分割线实现)
mRecyclerView.setDivider() 如果是网格或瀑布流视图,你甚至可以设置横竖不同的分割线 Divider 及分割线大小

// 设置数据空 View(设置 isRetainShowHeadOrFoot 为 true 时,可以让显示 EmptyView 时不会清除掉添加的 HeadView 和 FooterView)
mRecyclerView.setEmptyView()

// Item 单击事件
mRecyclerView.setOnItemClickListener(new FamiliarRecyclerView.OnItemClickListener() {
    @Override
    public void onItemClick(FamiliarRecyclerView familiarRecyclerView, View view, int position) {
        // ...
    }
});

// Item 长按事件
mRecyclerView.setOnItemLongClickListener(new FamiliarRecyclerView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(FamiliarRecyclerView familiarRecyclerView, View view, int position) {
        return true;
    }
});

// 设置滚动到顶部或底部时的事件回调
mRecyclerView.setOnScrollListener(new FamiliarRecyclerViewOnScrollListener(mRecyclerView.getLayoutManager()) {
    @Override
    public void onScrolledToTop() {
        // top
    }

    @Override
    public void onScrolledToBottom() {
        // bottom
    }
});

另外新增了 简易 Adapter 另提供一个用于 DataBinding 中的通用 Adapter

mAdapter = new FamiliarEasyAdapter<UserInfo>(this, R.layout.item_view, data) {
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        TextView tvName = holder.findView(R.id.tv_name);
        tvName.setText(mAdapter.getData(position).getName());
    }
};

等...
当然,RecyclerView 原有的那些全部都能正常使用的

布局

// LinearLayout (ListView)
<cn.iwgang.familiarrecyclerview.FamiliarRecyclerView
    android:id="@+id/mRecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical"
    app:frv_divider="#696969"
    app:frv_dividerHeight="1dp"
    app:frv_emptyView="@id/tv_empty"
    app:frv_layoutManager="linear"
    app:frv_layoutManagerOrientation="vertical" />

// GridLayout (GridView)
<cn.iwgang.familiarrecyclerview.FamiliarRecyclerView
    android:id="@+id/mRecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical"
    app:frv_dividerHorizontal="#FFEE00"
    app:frv_dividerVertical="#FFCCDD"
    app:frv_dividerHorizontalHeight="10dp"
    app:frv_dividerVerticalHeight="30dp"
    app:frv_itemViewBothSidesMargin="20dp"
    app:frv_layoutManager="grid"
    app:frv_layoutManagerOrientation="vertical"
    app:frv_spanCount="3" />

// StaggeredGridLayout (瀑布流)
<cn.iwgang.familiarrecyclerview.FamiliarRecyclerView
      android:id="@+id/mRecyclerView"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:scrollbars="vertical"
      app:frv_divider="#EFADEF"
      app:frv_dividerHorizontalHeight="10dp"
      app:frv_dividerVerticalHeight="10dp"
      app:frv_itemViewBothSidesMargin="20dp"
      app:frv_layoutManager="staggeredGrid"
      app:frv_layoutManagerOrientation="vertical"
      app:frv_spanCount="2" />

下拉刷新 + 加载更多

在 1.3.0 版本开始,新增加了 FamiliarRefreshRecyclerView 来实现下拉刷新及加载更多 建议参考示例代码

// 布局 (FamiliarRecyclerView 的属性全可以使用,List、Gird、staggeredGrid 均可设置)
<cn.iwgang.familiarrecyclerview.FamiliarRefreshRecyclerView
    android:id="@+id/cv_refreshListRecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical"
    app:frv_divider="#333333"
    app:frv_dividerHeight="0.5dp"
    app:frv_emptyView="@id/tv_empty"
    app:frv_isEmptyViewKeepShowHeadOrFooter="true"
    app:frv_layoutManager="linear"
    app:frv_layoutManagerOrientation="vertical" />

// 下拉刷新回调
mCvRefreshListRecyclerView.setOnPullRefreshListener(...)

// 加载更多回调
mCvRefreshListRecyclerView.setOnLoadMoreListener(...)

// 设置加载更多的 View
mCvRefreshListRecyclerView.setLoadMoreView(...)

// 设置启动/停用下拉刷新
mCvRefreshListRecyclerView.setLoadMoreEnabled(true / false);

// 设置启动/停用加载更多
mCvRefreshListRecyclerView.setPullRefreshEnabled(true / false);

自定义配置

参数 类型 默认值 说明
frv_divider reference / color 全局分割线 divider
frv_dividerVertical reference / color 垂直分割线 divider
frv_dividerHorizontal reference / color 水平分割线 divider
frv_dividerHeight dimension 1px 全局分割线 size
frv_dividerVerticalHeight dimension 1px 垂直分割线 size
frv_dividerHorizontalHeight dimension 1px 水平分割线 size
frv_dividerHorizontalLeftMargin dimension 水平分割线左边距
frv_dividerHorizontalRightMargin dimension 水平分割线右边距
frv_dividerVerticalTopMargin dimension 垂直分割线上边距
frv_dividerVerticalBottomMargin dimension 垂直分割线下边距
frv_isNotShowGridEndDivider boolean false 是否不显示 Grid 最后 item 的分割线
frv_itemViewBothSidesMargin dimension itemView 两边的边距(不会设置 headerView 和 footerView 的两边)
frv_emptyView reference emptyView id
frv_isEmptyViewKeepShowHeadOrFooter boolean false 显示 EmptyView 时,是否保留显示已设置的 HeadView 和 FooterView
frv_layoutManager linear / grid / staggeredGrid linear 布局类型
frv_layoutManagerOrientation horizontal / vertical vertical 布局方向
frv_spanCount integer 2 格子数量,frv_layoutManager=grid / staggeredGrid 时有效
frv_headerDividersEnabled boolean false 是否启用 headView 中的分割线
frv_footerDividersEnabled boolean false 是否启用 footerView 中的分割线
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools