1、 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(new GridLayoutManag
2、er(HistoryActivity.this,2);rcv_history.setAdapter(Adapter);创建一个类继承RecycleView.Adapter5.RecycleView.Adapter= class HistoryAdapter extends RecyclerView.Adapter/指定泛型创建一个类 集成RecycleView.ViewHolder()/返回的是一个Holder Override /i不是下标 而是类型 如何实现了getItemViewType()/ /onCreateViewHolder加载对应布局,初始化对应的holder,每种布局对应自己
3、的holder public HistoryAdapter.MediaHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) MediaHolder holder = new MediaHolder(LayoutInflater.from(HistoryActivity.this).inflate(R.layout.item_history,null); View view = null; ViewHolder holder = null; switch(viewType )case. break/根据类型的不同加载对应的布局
4、return holder; class MediaHolder extends RecycleView.ViewHolder View view; public MediaHolder(View itemView) /构造器 itemView列表中的item,类似convertView super(itemView); this.view = itemView;/对item布局进行初始化 /textView = itemView.findViewById(R.id.textView); iv_item_history_icon = (ImageView) itemView.findViewB
5、yId(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./onBin
6、dViewHolder 绑定对应的holder,加载对应的布局设置Item的显示 /第一个参数 onCreateViewHolder中返回的Holder类型 第二个参数指定的下标public void onBindViewHolder(HistoryAdapter.MediaHolder holder, final int position) holder.ivitemhistory_icon.setImageResource(); /返回Item的总大小Override public int getItemCount() if(mediaInfos!=null) return mediaIn
7、fos.size(); else return 0;7.自定义RecycleView的监听 1.自定义RecycleView 2.Adapter里设置监听1. 创建一个接口 public interface RecycleItemClickListener void onItemClickListener(View view,int position);2.声明变量 RecycleItemClickListener listener;3.set方法 public void setRecycleItemClickListener(RecycleItemClickListener recycleI
8、temClickListener) this.recycleItemClickListener = recycleItemClickListener;4.实现的地方 /在Hodler中 得到itemVidew对象 /this.view = itemView;在ViewHolder个构造器里获得其View 在onBindViewHolder下/在此才有position public void onBindViewHolder(HistoryAdapter.MediaHolder holder, final int position) holder.view.setOnClickListener(
9、new OnClickListener() public void onClick(View v) if(listener!=null) listener.onItemClickListener(holder.view,position) );5.实现监听 adapter.setRecycleItemClickListener(new RecycleItemClickListener( public void onItemClickListener(holder.view,position) /对其进行一系列的操作 )-详细使用采用LayoutManager来处理Item的布局提供Item操作
10、的默认动画,例如在增加或者删除item的时候为了使用RecyclerView控件,我们需要创建一个Adapter和一个LayoutManager:Adapter:继承自RecyclerView.Adapetr类,主要用来将数据和布局item进行绑定。LayoutManager:布局管理器,设置每一项view在RecyclerView中的位置布局以及控件item view的显 示或者隐藏。当View重用或者回收的时候,LayoutManger都会向Adapter来请求新的数据来进行替换原来数据的内容。这种回收重用的机制可以提供性能,避免创建很多的view或者是频繁的调用findViewById方
11、法。这种机制和ListView还是很相似的。RecyclerView提供了三种内置的LayoutManager:LinearLayoutManager:线性布局,横向或者纵向滑动列表GridLayoutManager:表格布局StaggeredGridLayoutManager:流式布局,例如瀑布流效果优点:插拔式,高度的解耦,异常灵活#主要API LayoutManager:布局管理器(LinearLayoutManager 、GridLayoutManager、StaggeredGridLayoutManager) ItemDecoration:绘制Item间的间隔 ItemAnimato
12、r:Item增删的动画#使用步骤1.build.gradle中添加 dependencies compile2.布局内添加 3.代码中初始化并设置 RecyclerView recycleView = findView(R.id.recyclerview);设置布局管理器 LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);/线性 GridLayoutManager gridLayoutManager=new GridLayoutManager(this,4);/网格 StaggeredGridLayout
13、Manager staggeredGridLayoutManager=new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);/流式设置布局管理器的方向 linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);设置 recyclerView.setLayoutManager(layout); recycl
14、erView.setAdapter(adapter); recyclerView.addItemDecoration(new DividerGridItemDecoration(this);/添加分割线,继承RecyclerView.ItemDecoration recyclerView.setItemAnimator(new DefaultItemAnimator();/设置默认Item增删动画#Adapter的实现1.自定义类继承RecycleView的Adapter同时绑定ViewHolder class MyAdapter extends RecyclerView.Adapter2.实
15、现方法 public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) LayoutInflater mInflater = LayoutInflater.from(context); MyViewHolder holder = new MyViewHolder(mInflater.inflate( R.layout.item_home, parent, false); public void onBindViewHolder(MyViewHolder holder, int position) holder.tv.
16、setText(mDatas.get(position); public int getItemCount() return mDatas.size();3.MyViewHolder class MyViewHolder extends RecyclerView.ViewHolder TextView tv; public MyViewHolder(View view) super(view); tv = (TextView) view.findViewById(R.id.id_num);#增删Item的动画 mDatas.add(position, Insert One); notifyIt
17、emInserted(position);/增加 mDatas.remove(position); notifyItemRemoved(position);/删除#设置点击监听1.在Adapter中自定义监听 public interface OnItemClickLitener void onItemClick(View view, int position); void onItemLongClick(View view, int position); private OnItemClickLitener mOnItemClickLitener; public void setOnItem
18、ClickLitener(OnItemClickLitener mOnItemClickLitener) this.mOnItemClickLitener = mOnItemClickLitener;2.在onBindViewHolder方法中绑定 if (mOnItemClickLitener != null) holder.itemView.setOnClickListener(new OnClickListener() public void onClick(View v) int pos = holder.getLayoutPosition(); mOnItemClickLitener
19、.onItemClick(holder.itemView, pos); holder.itemView.setOnLongClickListener(new OnLongClickListener() public boolean onLongClick(View v) mOnItemClickLitener.onItemLongClick(holder.itemView, pos); removeData(pos); return false;3.在Activity中设置监听 mAdapter.setOnItemClickLitener(new HomeAdapter.OnItemClick
20、Litener() public void onItemClick(View view, int position) Toast.makeText(HomeActivity.this, position + click, Toast.LENGTH_SHORT).show(); public void onItemLongClick(View view, int position) long click#分类型的RecycleView1.MyAdapter继承RecyclerView.Adapter2.通过枚举定义不同的Item /枚举Item public enum ITEM_TYPE ITE
21、M1, ITEM2, ITEM3, ITEM43.根据不同的Item加载不同的ViewHolder public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) /加载的时候,根据不同的Item加载不同的布局 /Enum类提供了一个ordinal()方法,返回枚举类型的序数,这里ITEM_TYPE.ITEM1.ordinal()代表0, ITEM_TYPE.ITEM2.ordinal()代表1 if (viewType = ITEM_TYPE.ITEM1.ordinal() return ne
22、w Item1ViewHolder(layoutInflater.inflate(R.layout.item1, parent, false); else if (viewType = ITEM_TYPE.ITEM2.ordinal() return new Item2ViewHolder(layoutInflater.inflate(R.layout.item2, parent, false); else if (viewType = ITEM_TYPE.ITEM3.ordinal() return new Item3ViewHolder(layoutInflater.inflate(R.l
23、ayout.item3, parent, false); else return new Item4ViewHolder(layoutInflater.inflate(R.layout.item4, parent, false);4.根据position返回不同类型的Item public int getItemViewType(int position) if (position item1.size() return ITEM_TYPE.ITEM1.ordinal(); else if (position item2.size()+item1.size() return ITEM_TYPE
24、.ITEM2.ordinal(); item3.size()+item2.size()+item1.size() return ITEM_TYPE.ITEM3.ordinal(); item4.size()+item3.size()+item2.size()+item1.size() return ITEM_TYPE.ITEM4.ordinal(); return super.getItemViewType(position);5.根据Item的类型设置数据 public void onBindViewHolder(RecyclerView.ViewHolder holder, int pos
25、ition) /根据holder的类型设置数据 if (holder instanceof Item1ViewHolder) if(positionitem1.size()&positionitem1.size()+item2.size() (Item2ViewHolder) holder).tv2.setText(item2.get(position); else .6.返回总数量 return item1.size() + item2.size() + item3.size() + item4.size();7.创建ViewHolder public static class Item1ViewHolder extends RecyclerView.ViewHolder public Item1ViewHolder(View itemView) super(item
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1