我是靠谱客的博主 喜悦煎蛋,最近开发中收集的这篇文章主要介绍RecyclerView的使用方法和瀑布流的实现RecyclerView的功能十分强大,通过一个RecyclerView可以变换成为listview、gridview、瀑布流,下面就详细介绍一个RecyclerView的具体使用方法 项目示例截图:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

RecyclerView的功能十分强大,通过一个RecyclerView可以变换成为listview、gridview、瀑布流,下面就详细介绍一个RecyclerView的具体使用方法
项目示例截图:


1、首先找到RecyclerView的一个jar包,这个jar包要和你的sdk版本尽量是一致的,要不然有可能会出现找不到资源的错误,jar包路径在

..sdkextrasandroidsupportv7recyclerviewlibs(sdk安装路径下的文件夹)
找到jar包之后可以直接拷贝到项目的libs文件下,然后就可以使用RecyclerView了

2、创建布局文件,示例中的布局文件只放置了一个RecyclerView,代码如下

(注意:要使用<android.support.v7.widget.RecyclerView>声明)

<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"
    tools:context="com.example.recyclerviewdemo.MainActivity" >

    <<span style="color:#ff6666;">android.support.v7.widget.RecyclerView</span>
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

3、为RecyclerView的每一个item设置一个布局,这里就简单的使用一个TextView来充当item,内容设置为wrap_content

<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="wrap_content"
    android:background="#ffcc00"
    android:layout_margin="5dp"
    tools:context="com.example.recyclerviewdemo.MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="TextView" />

</RelativeLayout>

4、为RecyclerView设置一个Adapter来实现数据和视图的一个绑定

(RecyclerView的adapter需要继承RecyclerView.Adapter<MyViewholder>这里的MyViewholder是重写的一个Viewholder,RecyclerView的adapter必须结合Viewholder来使用,这对布局的优化起了很大的作用)

RecyclerView的adapter主要有两个方法和一个Viewholder类组成

a、onCreateViewHolder方法,主要是实现把布局文件实例化出来,然后放进我们的Viewholder内部类中进行控件的实例化

public MyViewholder onCreateViewHolder(ViewGroup arg0, int arg1) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.item, arg0, false);
		MyViewholder myViewholder = new MyViewholder(view);
		return myViewholder;
	}

b、onBindViewHolder方法,主要是将数据和我们的控件绑定在一起,实现数据绑定

public void onBindViewHolder(final MyViewholder arg0, int arg1) {
		// TODO Auto-generated method stub
		arg0.textView.setText(list.get(arg1));

	}

c、ViewHolder内部类,这里我们重写了一个MyViewholder内部类,继承了Viewholder,实现控件的实例化

class MyViewholder extends ViewHolder {
	TextView textView;
	public MyViewholder(View arg0) {
		super(arg0);
		textView = (TextView) arg0.findViewById(R.id.textView1);
	}
}
通过上面几个方法的完成,我们就可以将数据通过构造方法传入adapter中,实现数据和视图的绑定

5、在MainActivity中,我们需要实例化我们的adapter和RecyclerView

控件的实例化和平时一样,主要讲一下RecyclerView和listveiw等不同的点,RecyclerView主要是通过LayoutManager来进行管理的,通过LayoutManager来实现不同的样式,下面我们来分别介绍一下,通过RecyclerView来实现listview和gridview和瀑布流三种样式

a、实现listview功能

通过使用LinearLayoutManager我们可以实现listveiw的样式

LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
这里是设置了一个垂直方向的listview

b、通过使用GridLayoutManager我们可以实现GridView样式

recyclerView.setLayoutManager(new GridLayoutManager(this, 3,GridLayoutManager.HORIZONTAL, false));
上面参数表示了分3列显示数据,方向为水平方向

c、通过使用StaggeredGridLayoutManager我们可以实现瀑布流样式

recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
通过上面简单的设置我们就可以实现不同的显示样式,方法非常简单

6、上面已经介绍了比较核心的使用代码,下面把项目的源码发布一下

6.1  MainActivity代码

public class MainActivity extends ActionBarActivity {

	private RecyclerView recyclerView;
	private List<String> lists;
	private MyAdapter mAdapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initData();
		initView();
	}
	//
	private void initView() {
		// TODO Auto-generated method stub
		recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
		recyclerView.setAdapter(mAdapter);
		LinearLayoutManager layoutManager = new LinearLayoutManager(
				getApplicationContext(), LinearLayoutManager.VERTICAL, false);
		recyclerView.setLayoutManager(layoutManager);
                //此处是为了添加一个分隔线
		// recyclerView.addItemDecoration(new DividerItemDecoration(
		// getApplicationContext(), DividerItemDecoration.VERTICAL_LIST));
	}
	private void initData() {
		// TODO Auto-generated method stub

		lists = new ArrayList<String>();

		for (int i = 0; i < 20; i++) {
			if (i % 2 == 0) {
				lists.add("ggggggggggggggggffffffffffffffggggggggggggggggffffffffffffffggggggggggggggggfffffffffffffffffffffffffkkkkk"
						+ i);
			} else {
				lists.add("gggggggggggggggg" + i);
			}
		}

		mAdapter = new MyAdapter(getApplicationContext(), lists);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub

		switch (item.getItemId()) {
		case R.id.listview:
			recyclerView.setLayoutManager(new LinearLayoutManager(this,
					LinearLayoutManager.VERTICAL, false));
			break;
		case R.id.gridview:
			recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
			break;
		case R.id.horizengridview:
			recyclerView.setLayoutManager(new GridLayoutManager(this, 2,
					GridLayoutManager.HORIZONTAL, false));
			break;
		case R.id.pubuliu:
			recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,
					StaggeredGridLayoutManager.VERTICAL));
			break;
		case R.id.add:
			mAdapter.add(1);
			break;
		case R.id.delete:
			mAdapter.delete(1);
			break;
		}

		return true;
	}
}

6.2  MyAdapter代码

public class MyAdapter extends RecyclerView.Adapter<MyViewholder> {

	private LayoutInflater inflater;
	private Context context;
	private List<String> list;
	public MyAdapter(Context context, List<String> list) {
		// TODO Auto-generated constructor stub
		this.context = context;
		this.list = list;
		inflater = LayoutInflater.from(context);
	}

	@Override
	public int getItemCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public void onBindViewHolder(final MyViewholder arg0, int arg1) {
		// TODO Auto-generated method stub
		arg0.textView.setText(list.get(arg1));
	}

	@Override
	public MyViewholder onCreateViewHolder(ViewGroup arg0, int arg1) {
		// TODO Auto-generated method stub

		View view = inflater.inflate(R.layout.item, arg0, false);

		MyViewholder myViewholder = new MyViewholder(view);
		return myViewholder;
	}

	public void add(int pos) {
		list.add(pos, "插入新的");
		this.notifyItemInserted(pos);
	}

	public void delete(int pos) {
		list.remove(pos);
		this.notifyItemRemoved(pos);
	}

}

class MyViewholder extends ViewHolder {

	TextView textView;

	public MyViewholder(View arg0) {
		super(arg0);
		// TODO Auto-generated constructor stub
		textView = (TextView) arg0.findViewById(R.id.textView1);
	}

}

7、注意:本示例,RecyclerView无法响应单击事件,下个博文会介绍怎么给RecyclerView添加单击响应事件,请查看下一个博文


最后

以上就是喜悦煎蛋为你收集整理的RecyclerView的使用方法和瀑布流的实现RecyclerView的功能十分强大,通过一个RecyclerView可以变换成为listview、gridview、瀑布流,下面就详细介绍一个RecyclerView的具体使用方法 项目示例截图:的全部内容,希望文章能够帮你解决RecyclerView的使用方法和瀑布流的实现RecyclerView的功能十分强大,通过一个RecyclerView可以变换成为listview、gridview、瀑布流,下面就详细介绍一个RecyclerView的具体使用方法 项目示例截图:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部