RecyclerView之BaseRecyclerViewAdapterHelper(二)

    昨天说了最简单的用法,今天说点别的,项目还是接着昨天的项目写的。
    首先。昨天在写Adapter的时候传了两个参数,一个是数据类型,还有一个是BaseViewHolder,他这个框架的BaseViewHolder提供了很多方法,一般的项目直接用他这个就可以了,但是也可以自己重写BaseViewHolder。我就重写了一个,很简单的内容,只是给大家提供一个思路罢了;代码如下:
public class MyBaseViewHolder extends BaseViewHolder{

    public MyBaseViewHolder(View view) {
        super(view);
    }

    /**
     * 给View设置标题
     * @param viewId    view的id
     * @param title   标题的内容
     * @return
     */
    public BaseViewHolder setText(int viewId, String title) {
        TextView view = getView(viewId);
        view.setText(title);
        return this;
    }

    /**
     * 给imageView设置图片
     * @param viewId    imageView的id
     * @param imgUrl    图片的url
     * @return
     */
    public BaseViewHolder setImageResource(int viewId, String imgUrl) {
        ImageView view = getView(viewId);
        Glide.with(MainActivity.context).load(imgUrl).into(view);
        return this;
    }
}
    我重写了一个设置标题的方法,和一个显示图片的方法。一眼就能看明白,我要多说一句的是,图片显示我使用的谷歌推荐的一个开源框架Glide,可以自己去集成,用法很简单。这里重写了ViewHolder,在你重写的adapter的参数ViewHolder也要改成你重写的。
    接着要说的就是点击事件了,他这个框架点击事件是独立的,他已经给我们封装好了,以前,我们老碰到子view是button的时候,点击事件被拦截,他这个开源框架的点击事件已经给我们处理好了,我们只用按照他的调用就可以了。代码如下:
//item的点击长按事件
    private void initItemClickListener() {
        adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                ShowToast(context,"点击了第"+position+"个item");
            }
        });
        adapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
                ShowToast(context,"长按了第"+position+"个item");
                return false;
            }
        });
    }
    再就是子view的点击事件,跟item的点击事件不同的是,他这个子view的点击事件需要在adapter的convert方法里面绑定。绑定代码如下:
    protected void convert(MyBaseViewHolder helper, ShuJu item) {
        helper.setText(R.id.tv,item.getTitle())
                .addOnClickListener(R.id.btn1)
                .addOnClickListener(R.id.btn2)
                .addOnClickListener(R.id.btn3)
                .addOnLongClickListener(R.id.btn1)
                .addOnLongClickListener(R.id.btn2)
                .addOnLongClickListener(R.id.btn3);
        String imgUrl = "http://img2.3lian.com/2014/f6/173/d/51.jpg";
        helper.setImageResource(R.id.img,imgUrl);
//        Glide.with(context).load(imgUrl).into((ImageView) helper.getView(R.id.img));
    }
    点击事件的代码如下:
//item子控件的点击长按事件
    private void initChildItemClickListener() {
        adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public boolean onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                switch (view.getId()){
                    case R.id.btn1:
                        ShowToast(context,"点击了第"+position+"个item的第一个按钮");
                        break;
                    case R.id.btn2:
                        ShowToast(context,"点击了第"+position+"个item的第二个按钮");
                        break;
                    case R.id.btn3:
                        ShowToast(context,"点击了第"+position+"个item的第三个按钮");
                        break;
                }
                return false;
            }
        });
        adapter.setOnItemChildLongClickListener(new BaseQuickAdapter.OnItemChildLongClickListener() {
            @Override
            public void onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) {
                switch (view.getId()){
                    case R.id.btn1:
                        ShowToast(context,"长按了第"+position+"个item的第一个按钮");
                        break;
                    case R.id.btn2:
                        ShowToast(context,"长按了第"+position+"个item的第二个按钮");
                        break;
                    case R.id.btn3:
                        ShowToast(context,"长按了第"+position+"个item的第三个按钮");
                        break;
                }
            }
        });
    }
    根据子View的id判断点击了哪个控件,然后做对应的操作即可。
    最后一个就是添加动画效果,默认提供5种动画。代码如下:
private void initAnimation() {
        adapter.openLoadAnimation(BaseQuickAdapter.SCALEIN);//有5种,渐显、缩放、从下到上,从左到右、从右到左
        adapter.isFirstOnly(false);//默认是true第一次有动画后面没有,false每次都有动画
    }
    当然也可以自定义动画,代码如下:
quickAdapter.openLoadAnimation(new BaseAnimation() {
                            @Override
                            public Animator[] getAnimators(View view) {
                                return new Animator[]{
                                        ObjectAnimator.ofFloat(view, "scaleY", 1, 1.1f, 1),
                                        ObjectAnimator.ofFloat(view, "scaleX", 1, 1.1f, 1)
                                };
                            }
                        });
    要说的就这么多,自己实际操作一遍就会了。

项目链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海晨忆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值