【第22期】观点:IT 行业加班,到底有没有价值?

RecyclerView使用介绍

原创 2015年11月18日 11:39:38


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下载

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



版权声明:本文为欢乐斗佛原创文章,未经其允许不得转载。 举报

相关文章推荐

RecyclerView使用介绍

来源 http://jinyudong.com/2014/11/13/Introduce-RecyclerView-%E4%B8%80/ 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以...

Android L——RecyclerView,CardView的导入和使用

本文主要介绍Android L新增加的两个UI控件RecyclerView,CardView的导入和使用。 RecyclerView:</stro

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

RecyclerView使用介绍

RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好。接下来通过一系列的文章讲解如何使用RecyclerView...

Android Design Support 介绍

 简介              Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,

RecyclerView使用介绍

RecyclerView使用介绍本文全文转载,个人收藏,感谢原作者!先贴出原文链接再说:原文 文章结构: 1. 介绍 2. 简单使用方法 3. 高级使用方法   RecyclerView 是...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)