RecyclerView的使用

1. 添加依賴:compile'com.android.support:recyclerview-v7:23.1.1',也可以直接添加高版本的design包,會自動添加recyclerView包。
2.  在xml佈局文件中引用RecyclerView
3.  繼承RecyclerView.Adapter<RecyclerView.ViewHolder>構造RecyclerView的數據適配器
4.  在Activity中給RecyclerView設置佈局管理器(三種佈局管理器分別是LinearLayoutManagerGridLayoutManager以及StaggeredGridLayoutManager
5.  封裝item的點擊事件以及長按事件
6.  建議將點擊事件寫在自定義ViewHolder中,要想獲得點擊item的位置一定要使用getLayoutPosition方法來獲得。
注:RecyclerView有一個致命的缺點,每個item之間Google沒有實現Divider的設定,解決方案有:
1 設置maigin屬性。
2 實現RecyclerView.ItemDecoration:一般可從github上找已做好的框架
3 使用CardView進行item佈局,且有卡片的視覺效果

@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

rv= (RecyclerView) findViewById(R.id.recyclerview);

finalMyRecylerViewAdapter adp =newMyRecylerViewAdapter(this,beans);

adp.setPcb(newMyRecylerViewAdapter.PositionCallBack() {
@Override
public voidpostPosition(intpos) {
beans.remove(pos);
adp.addBeans(beans,pos);
}
});

rv.setAdapter(adp);

// rv.setLayoutManager(getLinearLayoutManager());//horizonal
// rv.setLayoutManager(getVirticalLayoutManager());//virtical
rv.setLayoutManager(getStaggerLayoutManager());//必須指定
}
/***四種樣式

publicRecyclerView.LayoutManager getLinearLayoutManager() {

return newLinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false);
}

publicRecyclerView.LayoutManager getVirticalLayoutManager() {
return newLinearLayoutManager(this, LinearLayoutManager.VERTICAL,false);
}

//流佈局
publicRecyclerView.LayoutManager getStaggerLayoutManager() {
return newStaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
}

//表格
publicRecyclerView.LayoutManager getGridLayoutManager() {
return newGridLayoutManager(this,3);
}
**/
***********************************************************************
//監聽器 實現效果點擊圖片刪除
public classMyRecylerViewAdapterextendsRecyclerView.Adapter<MyRecylerViewAdapter.MyHolderView> {

privateContext mContext;
privateList<CardBean>beans;
privateLayoutInflatermInflater;

publicMyRecylerViewAdapter(Context context,List<CardBean> beans){

mContext=context;
this.beans=beans;
mInflater=LayoutInflater.from(context);

}

@Override
publicMyHolderView onCreateViewHolder(ViewGroup parent,intviewType) {

View convertView=mInflater.inflate(R.layout.item_recylerview_cardview,null);

return newMyHolderView(convertView);
}

@Override
public voidonBindViewHolder(MyHolderView holder,intposition) {

CardBean bean=beans.get(position);
holder.tv.setText(bean.getImgTitle());
holder.img.setImageResource(bean.getImgId());
}
@Override
public intgetItemCount() {
returnbeans.size();
}
classMyHolderView extendsRecyclerView.ViewHolder{

publicTextView tv;
publicImageView img;

publicMyHolderView(View convertView){
super(convertView);

tv= (TextView) convertView.findViewById(R.id.tv);
img= (ImageView) convertView.findViewById(R.id.img);

img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

int position = getLayoutPosition();


if(pcb!=null){
pcb.postPosition(position);
}
}
});

}
}

public interfacePositionCallBack{

public voidpostPosition(intpos);
}
PositionCallBackpcb;

public voidsetPcb(PositionCallBack pcb) {
this.pcb= pcb;
}

public voidaddBeans(List<CardBean> beans,intpos){

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