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);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章