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()根据数据刷新布局即可。