ListView的新朋友-------RecyclerView初识

 关注RecyclerView也有一段时间了,由于种种原因一直没有自己亲自动手事件一下,首先介绍一下RecyclerView,作为替代ListView使用,RecyclerView标准化了ViewHolder,ListView中convertView是复用的,以前我们是自己写ViewHolder,Google这次将其标准化,在RecyclerView中,是把ViewHolder作为缓存的单位了,然后convertView作为ViewHolder的成员变量保持在ViewHolder中,也就是说,假设没有屏幕显示10个条目,则会创建10个ViewHolder缓存起来,每次复用的是ViewHolder,所以他把getView这个方法变为了onCreateViewHolder。总之,RecyclerView比listview更简洁了,ViewHolder更适合多种子布局的列表(现在的项目貌似都有多种子的item,比如listview中间加广告之类的)。RecyclerView不提供setOnItemClickListener方法,你可以在ViewHolder中添加事件。总之,RecyclerView比listview更简洁了


RecyclerView可以实现横向、纵向滑动视图

      

使用RecyclerView,必须使用指定一个adapter、定义一个布局管理器。创建adapter必须继承自RecyclerView.Adapter。实施的细节需要看数据类型和需要的视图。

  RecyclerView widget



RecyclerView 提供了 LayoutManager,RecylerView 不负责子 View 的布局,我们可以自定义 LayoutManager 来实现不同的布局效果,目前只提供了LinearLayoutManager。 LinearLayoutManager 可以指定方向,默认是垂直, 可以设置成水平。

注意: 必须为RecyclerView 设置LayoutManager,否则回报空指针异常

代码中使用RecyclerView

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


首先 添加  android-support-v7-recyclerview.jar 

xml布局

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://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="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical" />

</RelativeLayout>

MainActivity.java

package com.zyh.testrecyclerview;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

public class MainActivity extends Activity {

	private RecyclerView	mRecyclerView;
	private MyRecycleAdapter	adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		initData();
	}

	private void initView() {
		mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
	}

	private void initData() {

		//初始化数据
		List<String> list = new ArrayList<String>();
		for(int i=0;i<100;i++){
			list.add("我是测试条目:"+i);
		}

		//设置LayoutManager
		LinearLayoutManager layoutManager = new LinearLayoutManager(this);

//		layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); //水平方向listview
		mRecyclerView.setLayoutManager(layoutManager );

		//创建Adapter
		adapter  = new MyRecycleAdapter(list);
		mRecyclerView.setAdapter(adapter);
	}
}


MyRecycleAdapter.java

package com.zyh.testrecyclerview;

import java.util.List;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyRecycleAdapter extends RecyclerView.Adapter<MyRecycleAdapter.ViewHolder> {

	private List<String>	list;

	public MyRecycleAdapter(List<String> list) {
		this.list = list;
	}

	@Override
	public int getItemCount() {
		return list.size();
	}

	@Override
	public void onBindViewHolder(ViewHolder holder, int position) {
		holder.mTextView.setText(list.get(position));
	}

	@Override
	public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
		// 创建一个View,简单起见直接使用系统提供的布局,就是一个TextView
		View view = View.inflate(viewGroup.getContext(), android.R.layout.simple_list_item_1, null);
		// 创建一个ViewHolder
		ViewHolder holder = new ViewHolder(view);
		return holder;
	}

	public static class ViewHolder extends RecyclerView.ViewHolder {
		public TextView	mTextView;

		public ViewHolder(View itemView) {
			super(itemView);
			mTextView = (TextView) itemView;
		}
	}
}