使用
- recyclerview基于v7包,需要现在项目中引入v7或单独引入recyclerview.
- 去除滑动到边缘自带的阴影效果
<android.support.v7.widget.RecyclerView
...
android:overScrollMode="never"/>
3.recyclerview无自带点和触摸事件,需要自行编写接口进行监听,示例代码:
//不限于OnClickListener ,OnLongClickListener, OnTouchListener等等,任意接口
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
implements View.OnClickListener {
...
//实例化接口
private OnItemClickListener onItemClickListener;
@Override
public void onClick(View v) {
//加入自定义的接口方法
if (onItemClickListener!=null){
onItemClickListener.onItemClick((Integer) v.getTag());
}
}
//自定义接口
public interface OnItemClickListener{
void onItemClick(int position);
}
//在activity内设置监听
public void setOnItemClickListener(OnItemClickListener itemClickListener) {
onItemClickListener = itemClickListener;
}
//给每个item设置tag
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
...
viewHolder.itemView.setTag(position);
...
}
//给每个item视图设置事件监听
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View inflate;
inflate =...;
inflate.setOnClickListener(this);
...
}
...
}
- 设置添加删除动画,默认动画添加删除为淡入淡出.继承SimpleItemAnimator重写方法可自定义动画.
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
5.通过设置不同的LayoutManager启用不同的布局
/*
* 1. LinerLayoutManager 以垂直或者水平列表方式展示Item
* 2. GridLayoutManager 以网格方式展示Item
* 3. StaggeredGridLayoutManager 以瀑布流方式展示Item
*/
mRecyclerView.setLayoutManager(mLayoutManager);
踩坑
- Recyclerview高度根据内部item数目进行随动时,即高度设置为wrap_content,当绑定的adapter数据源size由1变为0时,notifyDataSetChanged()后最后一条数据仍在显示,add一条数据后再次notifyDataSetChanged(),数据会替换为新增的数据.
解决:高度设置为任意固定值可解决. - 由于组件重用导致数据混乱傻瓜解决方法
adapter内viewholder设置setIsRecyclable为false,即不重用组件,在item数目少时可有效解决.
mHolder.setIsRecyclable(false);
持续更新