Recyclerview使用與踩坑

使用


  • recyclerview基於v7包,需要現在項目中引入v7或單獨引入recyclerview.
  • 去除滑動到邊緣自帶的陰影效果
<android.support.v7.widget.RecyclerView
        ...
        android:overScrollMode="never"/>
  • 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());
  • 通過設置不同的LayoutManager啓用不同的佈局
/*
* 1. LinerLayoutManager 以垂直或者水平列表方式展示Item
* 2. GridLayoutManager 以網格方式展示Item
* 3. StaggeredGridLayoutManager 以瀑布流方式展示Item
*/
mRecyclerView.setLayoutManager(mLayoutManager);

踩坑


  1. Recyclerview高度根據內部item數目進行隨動時,即高度設置爲wrap_content,當綁定的adapter數據源size由1變爲0時,notifyDataSetChanged()後最後一條數據仍在顯示,add一條數據後再次notifyDataSetChanged(),數據會替換爲新增的數據.
    解決:高度設置爲任意固定值可解決.
  2. 由於組件重用導致數據混亂傻瓜解決方法
    adapter內viewholder設置setIsRecyclable爲false,即不重用組件,在item數目少時可有效解決.
    java
    mHolder.setIsRecyclable(false);

持續更新

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章