(7) 盘古UI,三步出列表! 重新封装RecyclerView适配器,BaseRecyclerViewAdapter,让开发更快,使用很方便!

(7) 盘古UI,三步出列表! 重新封装RecyclerView适配器,BaseRecyclerViewAdapter,让开发更快,使用很方便!

盘古UI,较为全面的自定义UI框架,帮助你绝对的快速开发!(长期维护中)

demo地址,点击查看github

盘古BaseRecyclerViewAdapter

如果直接使用recyclerView加载列表会非常繁琐,这也是开发者不愿意去做但又不得不做的事情,因为实际开发中展示列表的页面随处可见,基于大家的痛点,对整个加载列表流程和代码的分析和梳理,最终整理和封装出了最简洁的这款适配器-BaseRecyclerViewAdapter,让你只需要三步就可以快速简便的写出一个列表!开发速度大大提升,代码量也大大降低,代码的整洁程度得到了质的提升,来一起看下吧!

1, 样例展示图,和原来适配器实现的效果一样

请添加图片描述

2, 使用步骤

1,布局文件
  <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/pg_recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
2,创建适配器和item
         // 准备数据
        List<SelectItem> selectItems = UserUtil.getSelectItems();
        selectItems.addAll(selectItems);
        selectItems.addAll(selectItems);

        // 创建适配器
        BaseRecyclerViewAdapter<SelectItem> adapter = new BaseRecyclerViewAdapter<SelectItem>(this, selectItems, new BaseRecyclerViewAdapter.Delegate<SelectItem>() {
            @Override
            public View buildView(ViewGroup parent, int viewType) {
                return new DemoItemView(PanguRecyclerAdapterActivity.this);
            }

            @Override
            public void bindViewData(int position, SelectItem data, View view) {

                DemoItemView itemView = (DemoItemView) view;
                //设置数据|做一些操作
                itemView.setData(data);
            }
        });
    
        
3,设置适配器
   mPgRecycler.setAdapter(adapter);

到此就完成了!下面是几个细节简单说明一下
DemoItemView 是item的布局,根据自己的需求可以自定义.我是使用的统一封装的BaseView 实现,效率也很高,可以参考,代码如下


public class DemoItemView extends BaseView {


    @Bind(R.id.tv_title)
    TextView mTvTitle;
    @Bind(R.id.iv_check)
    ImageView mIvCheck;
    @Bind(R.id.ll_root)
    LinearLayout mLlRoot;

    public DemoItemView(Context context) {
        super(context);
    }

    @Override
    protected int getLayoutId() {
        return R.layout.item_demo;
    }

    @Override
    protected void initView(Context context, AttributeSet attrs, int defStyleAttr) {
        ButterKnife.bind(this);
    }

    /**
     * 设置数据的业务逻辑全在这
     *
     * @param bean
     */
    public void setData(SelectItem bean) {
        if (bean == null) {
            return;
        }
        mTvTitle.setTextColor(bean.isSelect() ? getResources().getColor(R.color.blue_text_color) : Color.parseColor("#4E5969"));

        mLlRoot.setBackgroundColor(bean.isSelect() ? Color.parseColor("#E8F1FF") : getResources().getColor(R.color.white));
        mIvCheck.setVisibility(bean.isSelect() ? VISIBLE : GONE);
        mTvTitle.setText(bean.getName());
    }

}

3,代码封装简析

经过反复的分析和总结 ,展示一个列表其实是只需要数据+布局,所以这两个以代理模式让使用者给出就完成了最重要的封装步骤!
1,继承 RecyclerView.Adapter<BaseViewHolder>

public class BaseRecyclerViewAdapter<T> extends RecyclerView.Adapter<BaseViewHolder<T>> {

2,设置代理

   public void setmDelegate(Delegate<T> mDelegate) {
        this.mDelegate = mDelegate;
    }

3,重写需要的方法,结合代理暴露出data和view给使用者,完成封装

    /**
     * 绑定布局
     *
     * @param parent
     * @param viewType
     * @return 顶级ViewHolder
     */
    @NonNull
    @Override
    public BaseViewHolder<T> onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = mDelegate.buildView(parent, viewType);
        return new BaseViewHolder<T>(view);
    }

   /**
     * 绑定ViewHolder数据,处理数据
     *
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
        if (mDelegate != null) {
            mDelegate.bindViewData(position, list.get(position), holder.itemView);
        }
        // 对条目设置点击事件回调
        holder.itemView.setOnClickListener((v) -> {
            if (itemClickRecyclerListener != null) {
                itemClickRecyclerListener.onItemClick(position, list.get(position), holder.itemView);
            }
        });
        holder.itemView.setOnLongClickListener((v) -> {
            if (itemLongClickRecyclerListener != null) {
                return itemLongClickRecyclerListener.onItemLongClick(position, list.get(position), holder.itemView);
            }
            return false;
        });
    }

4, 代码封装心得

要善于分析和总结,找到一定的规律和突破口,就是你封装的秘诀!

5, 获取地址

demo地址,点击查看github
欢迎您扫码安装体验demo
在这里插入图片描述

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九千行代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值