RecyclerView的简单使用

1.前言

RecyclerView能用来替代所有ListView的所有工作,并且扩展性更强,更便于控制。
拥有如下功能:

  • 每一个Item使用holder管理,优化了性能
  • 增加了增、删、移Item的接口,并且有相应的动画
  • 每条item设置不同的布局:不想每条item都是千篇一律的风格的可以使用
  • 动态变更每条item的布局:简单的例子就是长按某条item的时候早右上角显示一个删除的按钮。

下文会对上面的功能一一说明

2.基本设置

和ListView一样,使用RecyclerView也有一些基本的需要设置的选项。

  • setLayoutManager:设置布局管理器
  • setAdapter:设置适配器

3.设置长按、点击事件

RecyclerView默认是没有添加点击、长按的事件的,这点就有点坑爹,不过自己写也没有关系,样式各异都可以,下面是一种实现的方式。

在holder中实现并添加事件:

class BasicViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
        TextView tv;
        public BasicViewHolder(View view) {
            super(view);
            tv = (TextView) view.findViewById(R.id.tv_recycleitem_bookshelf_title);
            view.setOnClickListener(this);
            view.setOnLongClickListener(this);
        }
        @Override
        public void onClick(View v) {
            ...
        }
        @Override
        public boolean onLongClick(View v) {
            ...
            return true;
        }
    }

4.变更布局

选择布局:

    @Override
    public int getItemViewType(int position) {
        return mData.get(position).getModel();
    }

创建holder的时候根据上面选择的布局而定:

    @Override
    public BasicViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        BasicViewHolder holder;
        switch (viewType) {
            case DEFAULT_MODE:
                holder = new DefaultViewHolder(LayoutInflater.from(
                fb).inflate(R.layout.recycleview_item_bookshelt, parent,
                        false));
                break;
            case DELETE_MODE:
                holder = new DeleteViewHolder(LayoutInflater.from(
                fb).inflate(R.layout.recycleview_item_bookshelt, parent,
                        false));
                break;
            default:
                holder = new BasicViewHolder(LayoutInflater.from(
                fb).inflate(R.layout.recycleview_item_bookshelt, parent,
                        false));
                break;
        }
        return holder;
    }

最后调用notifyDataSetChanged()根据数据刷新布局即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值