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設置佈局管理器(三種佈局管理器分別是LinearLayoutManager,GridLayoutManager以及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);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.