项目封装库系列之“一”,RecycleView适配器

引言:记录自己项目中使用的库,非技术文章。

一、直接上代码

适配器

/**
 * @param layoutId 布局Id
 * @param ReceiveUser 实体类 、可以是任意类型
 * @param BaseViewHolder 适配器内部holder
 */
class SimpleAdapter(@LayoutRes layoutId: Int) :
    BaseQuickAdapter<ReceiveUser, BaseViewHolder>(layoutId) {

    //只需要实现convert方法
    override fun convert(holder: BaseViewHolder, item: ReceiveUser) {
        //itemView
        val itemRootView = holder.itemView
        //获取view方法
        val tvXxx = holder.getView<TextView>(0)

        //支持设置text及img背景图片
        //以下id均为测试 id=实际中的R.id.xxxx
        val viewId = 0x11212
        holder.setText(viewId, "设置的内容")

        val imgResId = 0x1231
        holder.setImageResource(viewId, imgResId)
    }

}

 使用

fun test(){
    val adapter=SimpleAdapter(0)

    //内部已完成notifyDataChange
    //添加数据等方法、
    val list= mutableListOf<ReceiveUser>()
    adapter.addData(list)
    //移除数据办法
    adapter.removeAt(0)
}

二、补充说明

BaseViewHolder 为内部holder 由第三方维护

三、相关第三库信息、及注意事项;

github:GitHub - CymChad/BaseRecyclerViewAdapterHelper: BRVAH:Powerful and flexible RecyclerAdapter

 普通且不复杂列表,可用此,复杂列表建议原生;

四 额外记录Grid类型 间距设置辅助类

自定义分割线类

/**
 * 设置RecyclerView GridLayoutManager or StaggeredGridLayoutManager spacing
 */

public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {

    private int spanCount;
    private int spacing;
    private boolean includeEdge;

    public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.includeEdge = includeEdge;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        int position = parent.getChildAdapterPosition(view); // item position
        int column = position % spanCount; // item column

        if (includeEdge) {
            outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
            outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)

            if (position < spanCount) { // top edge
                outRect.top = spacing;
            }
            outRect.bottom = spacing; // item bottom
        } else {
            outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
            outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f /    spanCount) * spacing)
            if (position >= spanCount) {
                outRect.top = spacing; // item top
            }
        }
    }
}

使用

 ConvertUtils.dp2px()  第三方、工具类...  

includeEdge 解释:是否包含边缘、即上下左右是否填充间距。

over........................

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值