为RecyclerView打造通用Adapter文档格式.docx

上传人:b****3 文档编号:16796584 上传时间:2022-11-26 格式:DOCX 页数:38 大小:101.38KB
下载 相关 举报
为RecyclerView打造通用Adapter文档格式.docx_第1页
第1页 / 共38页
为RecyclerView打造通用Adapter文档格式.docx_第2页
第2页 / 共38页
为RecyclerView打造通用Adapter文档格式.docx_第3页
第3页 / 共38页
为RecyclerView打造通用Adapter文档格式.docx_第4页
第4页 / 共38页
为RecyclerView打造通用Adapter文档格式.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

为RecyclerView打造通用Adapter文档格式.docx

《为RecyclerView打造通用Adapter文档格式.docx》由会员分享,可在线阅读,更多相关《为RecyclerView打造通用Adapter文档格式.docx(38页珍藏版)》请在冰豆网上搜索。

为RecyclerView打造通用Adapter文档格式.docx

rcv_history=(RecyclerView)findViewById(R.id.rcv_history);

4.LinearLayoutManager和GrideLayouManager两种显示风格

//LinearLayoutManager(ListView)

rcv_history.setLayoutManager(new(HistoryActivity.this));

//GridLayoutManager(GrideView)

//第二个参数就是GridView一样一行显示个个数

rcv_history.setLayoutManager(newGridLayoutManager(HistoryActivity.this,2));

rcv_history.setAdapter(Adapter);

创建一个类继承RecycleView.Adapter

5.RecycleView.Adapter==>

classHistoryAdapterextendsRecyclerView.Adapter<

HistoryAdapter.MediaHolder>

//指定泛型

创建一个类集成RecycleView.ViewHolder()

//返回的是一个Holder

@Override

//i不是下标而是类型如何实现了getItemViewType()//

//onCreateViewHolder加载对应布局,初始化对应的holder,每种布局对应自己的holder

publicHistoryAdapter.MediaHolderonCreateViewHolder(ViewGroupviewGroup,intviewType){

MediaHolderholder=newMediaHolder(LayoutInflater.from(HistoryActivity.this).inflate(R.layout.item_history,null));

Viewview=null;

ViewHolderholder=null;

switch(viewType){case...break}//根据类型的不同加载对应的布局

returnholder;

}

classMediaHolderextendsRecycleView.ViewHolder{

Viewview;

publicMediaHolder(ViewitemView){//构造器itemView列表中的item,类似convertView

super(itemView);

this.view=itemView;

//对item布局进行初始化

//textView=itemView.findViewById(R.id.textView);

iv_item_history_icon=(ImageView)itemView.findViewById(R.id.iv_item_history_icon);

tv_item_history_title=(TextView)itemView.findViewById(R.id.tv_item_history_title);

tv_item_history_duration=(TextView)itemView.findViewById(R.id.tv_item_history_duration);

iv_item_history_del=(ImageView)itemView.findViewById(R.id.iv_item_history_del);

6.//onBindViewHolder绑定对应的holder,加载对应的布局

设置Item的显示//第一个参数onCreateViewHolder中返回的Holder类型第二个参数指定的下标

publicvoidonBindViewHolder(HistoryAdapter.MediaHolderholder,finalintposition){holder.ivitemhistory_icon.setImageResource();

}//返回Item的总大小

@OverridepublicintgetItemCount(){if(mediaInfos!

=null){returnmediaInfos.size();

}else{

return0;

}

7.自定义RecycleView的监听1.自定义RecycleView2.Adapter里设置监听

1.创建一个接口

publicinterfaceRecycleItemClickListener{

voidonItemClickListener(Viewview,intposition);

2.声明变量

RecycleItemClickListenerlistener;

3.set方法

publicvoidsetRecycleItemClickListener(RecycleItemClickListenerrecycleItemClickListener){

this.recycleItemClickListener=recycleItemClickListener;

4.实现的地方

//在Hodler中得到itemVidew对象

//this.view=itemView;

在ViewHolder个构造器里获得其View

在onBindViewHolder下//在此才有position

publicvoidonBindViewHolder(HistoryAdapter.MediaHolderholder,finalintposition){

holder.view.setOnClickListener(newOnClickListener(){

publicvoidonClick(Viewv){

if(listener!

=null){

listener.onItemClickListener(holder.view,position)

});

5.实现监听

adapter.setRecycleItemClickListener(newRecycleItemClickListener(

publicvoidonItemClickListener(holder.view,position){

//对其进行一系列的操作

}

))

----------------------------------------------------------------------------------------------------------------------------------------------

详细使用

采用LayoutManager来处理Item的布局

提供Item操作的默认动画,例如在增加或者删除item的时候

为了使用RecyclerView控件,我们需要创建一个Adapter和一个LayoutManager:

Adapter:

继承自RecyclerView.Adapetr类,主要用来将数据和布局item进行绑定。

LayoutManager:

布局管理器,设置每一项view在RecyclerView中的位置布局以及控件itemview的显

示或者隐藏。

当View重用或者回收的时候,LayoutManger都会向Adapter来请求新的数据来进行替换原来数据的内容。

这种回收重用的机制可以提供性能,避免创建很多的view或者是频繁的调用findViewById方法。

这种机制和ListView还是很相似的。

RecyclerView提供了三种内置的LayoutManager:

LinearLayoutManager:

线性布局,横向或者纵向滑动列表

GridLayoutManager:

表格布局

StaggeredGridLayoutManager:

流式布局,例如瀑布流效果

优点:

插拔式,高度的解耦,异常灵活

#主要API

LayoutManager:

布局管理器(LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager)

ItemDecoration:

绘制Item间的间隔

ItemAnimator:

Item增删的动画

#使用步骤

1.build.gradle中添加

dependencies{

……

compile'

2.布局内添加

<

android.support.v7.widget.RecyclerView

@+id/recyclerView"

>

3.代码中初始化并设置

RecyclerViewrecycleView=findView(R.id.recyclerview);

设置布局管理器

LinearLayoutManagerlinearLayoutManager=newLinearLayoutManager(this);

//线性

GridLayoutManagergridLayoutManager=newGridLayoutManager(this,4);

//网格

StaggeredGridLayoutManagerstaggeredGridLayoutManager=newStaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);

//流式

设置布局管理器的方向

linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);

linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

设置

recyclerView.setLayoutManager(layout);

recyclerView.setAdapter(adapter);

recyclerView.addItemDecoration(newDividerGridItemDecoration(this));

//添加分割线,继承RecyclerView.ItemDecoration

recyclerView.setItemAnimator(newDefaultItemAnimator());

//设置默认Item增删动画

#Adapter的实现

1.自定义类继承RecycleView的Adapter同时绑定ViewHolder

classMyAdapterextendsRecyclerView.Adapter<

MyViewHolder>

2.实现方法

publicMyViewHolderonCreateViewHolder(ViewGroupparent,intviewType){

LayoutInflatermInflater=LayoutInflater.from(context);

MyViewHolderholder=newMyViewHolder(mInflater.inflate(

R.layout.item_home,parent,false));

publicvoidonBindViewHolder(MyViewHolderholder,intposition){

holder.tv.setText(mDatas.get(position));

publicintgetItemCount(){

returnmDatas.size();

3.MyViewHolder

classMyViewHolderextendsRecyclerView.ViewHolder{

TextViewtv;

publicMyViewHolder(Viewview){

super(view);

tv=(TextView)view.findViewById(R.id.id_num);

#增删Item的动画

mDatas.add(position,"

InsertOne"

);

notifyItemInserted(position);

//增加

mDatas.remove(position);

notifyItemRemoved(position);

//删除

#设置点击监听

1.在Adapter中自定义监听

publicinterfaceOnItemClickLitener{

voidonItemClick(Viewview,intposition);

voidonItemLongClick(Viewview,intposition);

privateOnItemClickLitenermOnItemClickLitener;

publicvoidsetOnItemClickLitener(OnItemClickLitenermOnItemClickLitener){

this.mOnItemClickLitener=mOnItemClickLitener;

2.在onBindViewHolder方法中绑定

if(mOnItemClickLitener!

=null){

holder.itemView.setOnClickListener(newOnClickListener(){

publicvoidonClick(Viewv){

intpos=holder.getLayoutPosition();

mOnItemClickLitener.onItemClick(holder.itemView,pos);

holder.itemView.setOnLongClickListener(newOnLongClickListener(){

publicbooleanonLongClick(Viewv){

mOnItemClickLitener.onItemLongClick(holder.itemView,pos);

removeData(pos);

returnfalse;

3.在Activity中设置监听

mAdapter.setOnItemClickLitener(newHomeAdapter.OnItemClickLitener(){

publicvoidonItemClick(Viewview,intposition){

Toast.makeText(HomeActivity.this,position+"

click"

Toast.LENGTH_SHORT).show();

publicvoidonItemLongClick(Viewview,intposition){

longclick"

#分类型的RecycleView

1.MyAdapter继承RecyclerView.Adapter<

RecyclerView.ViewHolder>

2.通过枚举定义不同的Item

//枚举Item

publicenumITEM_TYPE{

ITEM1,

ITEM2,

ITEM3,

ITEM4

3.根据不同的Item加载不同的ViewHolder

publicRecyclerView.ViewHolderonCreateViewHolder(ViewGroupparent,intviewType){

//加载的时候,根据不同的Item加载不同的布局

//Enum类提供了一个ordinal()方法,返回枚举类型的序数,这里ITEM_TYPE.ITEM1.ordinal()代表0,ITEM_TYPE.ITEM2.ordinal()代表1

if(viewType==ITEM_TYPE.ITEM1.ordinal()){

returnnewItem1ViewHolder(layoutInflater.inflate(R.layout.item1,parent,false));

}elseif(viewType==ITEM_TYPE.ITEM2.ordinal()){

returnnewItem2ViewHolder(layoutInflater.inflate(R.layout.item2,parent,false));

}elseif(viewType==ITEM_TYPE.ITEM3.ordinal()){

returnnewItem3ViewHolder(layoutInflater.inflate(R.layout.item3,parent,false));

}else{

returnnewItem4ViewHolder(layoutInflater.inflate(R.layout.item4,parent,false));

4.根据position返回不同类型的Item

publicintgetItemViewType(intposition){

if(position<

item1.size()){

returnITEM_TYPE.ITEM1.ordinal();

}elseif(position<

item2.size()+item1.size()){

returnITEM_TYPE.ITEM2.ordinal();

item3.size()+item2.size()+item1.size()){

returnITEM_TYPE.ITEM3.ordinal();

item4.size()+item3.size()+item2.size()+item1.size()){

returnITEM_TYPE.ITEM4.ordinal();

returnsuper.getItemViewType(position);

5.根据Item的类型设置数据

publicvoidonBindViewHolder(RecyclerView.ViewHolderholder,intposition){

//根据holder的类型设置数据

if(holderinstanceofItem1ViewHolder){

if(position<

item1.size()){

((Item1ViewHolder)holder).tv1.setText(item1.get(position));

}elseif(holderinstanceofItem1ViewHolder){

if(position>

item1.size()&

&

position<

item1.size()+item2.size()){

((Item2ViewHolder)holder).tv2.setText(item2.get(position));

}else{

......

6.返回总数量

returnitem1.size()+item2.size()+item3.size()+item4.size();

7.创建ViewHolder

publicstaticclassItem1ViewHolderextendsRecyclerView.ViewHolder{

publicItem1ViewHolder(ViewitemView){

super(item

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1