RecyclerView使用介绍


RecyclerView是Google在5.0中发布的新控件,用来替代ListView,它的使用更加灵活,提供了更好的性能而且更容易使用。该控件是一个可以装载大量的视图集合,并且可以非常效率的进行回收和滚动。当你list中的元素经常动态改变时可以使用RecyclerView控件。

它提供了如下两个功能:
1、为每个条目位置提供了layout管理器(RecyclerView.setLayoutManager)
2、为每个条目设置了操作动画(RecyclerView.setItemAnimator)

一、使用前的准备

使用eclipse的Import导入两个库项目,路径为:你的sdk目录的/extras/android/support/v7:


导入之后把工程改为库项目,之后关联上自己的应用,如果还是无法使用,那么就直接下载我的jar包吧,jar包的使用就不介绍了:recyclerView下载,里面同时提供了CardView的jar包。

如果碰到ClassnotFound:android.support.v7.recyclerview.R.styleable,请使用这个jar包替换:替换jar


准备工作做完之后就可以正式的使用了,先来看下最基本的使用,上效果图


XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v7.widget.RecyclerView

        android:id="@+id/recyclerView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</RelativeLayout>

java代码:

public class MainActivity extends Activity {
	private RecyclerView recyclerView;
	private RecyclerView.Adapter<ViewHolder> adapter;
	private List<String> datas;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 初始化数据
		initData();
		recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
		// 设置是否固定大小
		recyclerView.setHasFixedSize(true);
		// 使用匿名内部类的形式创建RecyclerView的Adapter
		adapter = new Adapter<ViewHolder>() {
			// item的数量
			@Override
			public int getItemCount() {
				return datas.size();
			}

			// 初始化操作
			@Override
			public ViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
				final View view = LayoutInflater.from(MainActivity.this).inflate(android.R.layout.simple_list_item_1,
						null);

				return new MyViewHolder(view);
			}

			// 在这里添加视图
			@Override
			public void onBindViewHolder(ViewHolder viewHolder, int arg1) {
				((MyViewHolder) viewHolder).txtv.setText(datas.get(arg1));
			}
		};
		// 使用线性布局
		recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
		// 设置动画
		recyclerView.setItemAnimator(new DefaultItemAnimator());
		// 设置适配器
		recyclerView.setAdapter(adapter);

	}

	// 内部类用来创建ViewHolder
	public static class MyViewHolder extends ViewHolder {
		public TextView txtv;

		public MyViewHolder(View itemView) {
			super(itemView);
			txtv = (TextView) itemView.findViewById(android.R.id.text1);
		}

	}

	// 初始化数据
	private void initData() {
		datas = new ArrayList<String>();
		datas.add("小红1");
		datas.add("小红2");
		datas.add("小红3");
		datas.add("小红4");
		datas.add("小红5");
		datas.add("小红6");
		datas.add("小红7");

	}

}


没有分割线,是不是觉得很丑呢?下面加上分割线,添加代码如下:

	// 添加分割线
		recyclerView.addItemDecoration(new ItemDecoration() {

			@Override
			public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
				super.getItemOffsets(outRect, view, parent, state);
			}

			@Override
			public void onDraw(Canvas c, RecyclerView parent, State state) {
				super.onDraw(c, parent, state);
				Log.e("", "onDraw");
				// 初始化画笔
				Paint paint = new Paint();
				paint.setAntiAlias(true);
				paint.setDither(true);
				paint.setColor(Color.RED);
				// 开始画
				for (int i = 0, size = parent.getChildCount(); i < size; i++) {
					View view = parent.getChildAt(i);
					c.drawLine(view.getLeft(), view.getBottom(),
							((WindowManager) parent.getContext().getSystemService(Context.WINDOW_SERVICE))
									.getDefaultDisplay().getWidth(),
							view.getBottom(), paint);
				}
			}

			@Override
			public void onDrawOver(Canvas c, RecyclerView parent, State state) {
				super.onDrawOver(c, parent, state);
				Log.e("", "onDrawOver");
			}

		});

上效果图:


啊哈~~~~~~~~~简单粗暴的演示了一下界面,怎么添加点击事件呢???????????下面来添加item的点击事件:

如果你也是一个喜欢简单粗暴的直性子,那么我恭喜你,实现这个很容易,直接在adapter里的onBindViewHolder方法里面设置监听就好了,代码如下

	// 在这里添加视图
			@Override
			public void onBindViewHolder(ViewHolder viewHolder, final int arg1) {
				((MyViewHolder) viewHolder).txtv.setText(datas.get(arg1));
				//添加监听
				((MyViewHolder)viewHolder).txtv.setOnClickListener(new OnClickListener() {

					@Override
					public void onClick(View v) {
						Toast.makeText(MainActivity.this, "你点到我啦~" + arg1, Toast.LENGTH_SHORT).show();
					}
				});
			}

来个动态图片小小的演示一下~~~~~:


不过这个点击事件是有一定的缺陷的,就是只能在View大小内点击,不能再整个item点击。当然你也可以使用接口回调的方式把点击事件引出来,这里我就不再演示了,那么RecyclerView的演示就到这里吧,有时间再深入的研究一下。最后提供demo下载:demo下载

扫描关注我的微信公众号:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值