RecyclerView学习

       在V7包中发现RecycleView的jar包,API和网上资料得出,它就是可以代替ListView、GridView的View控件,介绍中它强制使用了ViewHolder类,需要我们做好回收和复用View就好,经过简单的了解,发现和我们常用的ListView和GridView还是区别很大的,不过目前没发现项目中要去使用它,初步了解学习;

这个RecyclerView 是在什么环境下开发呢,这个需要我们引用V7-RecyclerView的jar包,在SDK支持包libs下可找到。

首先呢,引入jar包后就可以使用recyclerView了;了解下它是干嘛的:

不关心Itme是否现在在正确的位置,如何显示。
    LayoutManager
不关心Item间如何分隔
    ItemDecoration
不关注Item增加与删除的动画效果
   ItemAnimator
仅仅关注如何回收与复用View
看代码:
初始化完成后
<span style="white-space:pre">	</span>//设置RecycleView的管理器
	LinearLayoutManager manager = new LinearLayoutManager(this);
	manager.setOrientation(LinearLayoutManager.VERTICAL);
	recyclerView.setLayoutManager(manager);
    写入Adapter:
<span style="white-space:pre">	</span><pre name="code" class="java"><span style="white-space:pre">	</span>//添加事件的点击事件
	public interface OnItemClickListener{
		public void onItemClick(View itemView, int pos);
		public void onItemLongClick(View itemView, int pos);
	}
	
	class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
		
		private OnItemClickListener mOnItemClickListener;
		public void setOnItemClickListener(OnItemClickListener listener){
			this.mOnItemClickListener = listener;
		}
		private List<String> list;
		private Context mContext;
		private LayoutInflater inflater;
		
		public MyAdapter(Context context,List<String> arry) {
			mContext = context;
			list = arry;
			inflater = LayoutInflater.from(mContext);
		}
		@Override
		public int getItemCount() {
			// TODO Auto-generated method stub
			return list.size();
		}

		@Override
		public void onBindViewHolder(final MyViewHolder arg0, final int arg1) {
			arg0.tv.setText(list.get(arg1));
			// 设置点击事件
			if(mOnItemClickListener!=null){
				//点击事件
				if(!isLongClick){
					arg0.itemView.setOnClickListener(new OnClickListener() {
						
						@Override
						public void onClick(View v) {
							int pos = arg0.getLayoutPosition();
							mOnItemClickListener.onItemClick(arg0.itemView,pos);
							isLongClick = false;
						}
					});
				}
				
				//长按事件
				arg0.itemView.setOnLongClickListener(new OnLongClickListener() {
					
					@Override
					public boolean onLongClick(View v) {
						int pos = arg0.getLayoutPosition();
						mOnItemClickListener.onItemLongClick(arg0.itemView,pos);
						isLongClick = true;
						return false;
					}
				});
			}
		}

		@Override
		public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
			View view = inflater.inflate(R.layout.recycler_item, arg0, false);
			MyViewHolder holder = new MyViewHolder(view);
			
			return holder;
		}
		public void add(int pos){
			list.add(pos,"1111");
			notifyItemInserted(pos);
		}
		public void detele(int pos){
			list.remove(pos);
			notifyItemRemoved(pos);
			
		}
	}
	class MyViewHolder extends ViewHolder{
		private TextView tv;
		public MyViewHolder(View arg0) {
			super(arg0);
			tv = (TextView) arg0.findViewById(R.id.textView1);
		}
	}
可以看出和常使用的ListView使用的BaseAdapter有很大区别,让我们强制使用了ViewHolder这个类,上面点击Item做了一个简单的回调处理,方便Activity中直接调用,当然我们写的时候可以分开去写,无效判断长按; int pos = arg0.getLayoutPosition();这个点注意是把每次增加删除后的item ID获取到,因为每次add后是notifyItemInserted(pos);没有重新适配整个布局,所以需要调用 getLayoutPosition();
 
 
<span style="font-family:微软雅黑, MS Sans Serif, sans-serif;"><span style="white-space:pre">	</span>上面说到RecyclerView没有分割线和动画,这个时候需要我们自己去处理,根据项目需求去写:</span>
<span style="font-family:微软雅黑, MS Sans Serif, sans-serif;"><span style="white-space:pre">	</span>例如:</span>
<span style="font-family:微软雅黑, MS Sans Serif, sans-serif;"><span style="white-space:pre"></span></span><pre name="code" class="java"><span style="white-space:pre">	</span>recyclerView.setItemAnimator(new DefaultItemAnimator());
       //recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
    更多的原理可以看下API,我实验完成后,没发现这个View吸引处在哪,不过作为谷歌推出的应该学习,如果项目中有需求比如ListView和GridView互换展示效果,可以选择这个View,方便,listView->GridView只需要我们
<pre name="code" class="java">recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
    几张效果图:刷新的功能网上很多,大家可以参考;
    <img src="https://img-blog.csdn.net/20150806104624946?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.csdn.net/20150806104636483?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.csdn.net/20150806104646919?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />


 
 


 
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值