android L新控件RecyclerView详解与DeMo

介绍

在谷歌的官网我们可以看到它是这样介绍的:RecyclerView is
a more advanced and flexible version of ListView.
This widget is a container for large sets of views that can be recycled and scrolled very efficiently. Use the RecyclerView widget
when you have lists with elements that change dynamically.

RecyclerView比listview更先进更灵活,对于很多的视图它就是一个容器,可以有效的重用和滚动。当数据动态变化的时候请使用它。

RecyclerView is easy to use, because it provides:

  • A layout manager for positioning items
  • Default animations for common item operations
  • You also have the flexibility to define custom layout managers and animations for this widget.

RecyclerView使用起来很方便因为它提供:

它为item的定位提供一个layoutmanager

为item的操作提供一个缺省的animations

您还可以灵活地定义这个小部件的自定义布局管理器和动画

To use the RecyclerView widget,
you have to specify an adapter and a layout manager. To create an adapter, you extend the RecyclerView.Adapter class.
The details of the implementation depend on the specifics of your dataset and the type of views. For more information, see the examples below.

为了使用RecyclerVIew,你必须指定一个adapter和一个layoutmanager,为了创建一个adapter,你必须得继承RecyclerView.Adapter,详细的实现方法取决与你的数据集和你视图的类型。

Demo介绍不同于官网

这里就介绍完了下面我们就要做自己的Demo了。如果需要看官网的Demo那么请打开这里:官方Demo

这里既然是详解那么就要与官方的Demo有不同,好了看看我们要做的效果吧。

实现图片文字按钮的混排。

首先还是看我的工程结构吧。

首先还是贴出我的main_acitivy.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

 <!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</LinearLayout>

其他几个xml就不用贴了,很简单的放了写TextVIew,ImgeView之类。

然后我们就来看看代码,首先是Bean里面的代码。

package com.androidl.bob;

/**
 * 实体包
 *
 * @author edsheng
 *
 */
public class Bean {
	public static final int Y_TYPE = 0; //view类型0
	public static final int X_TYPE = 1; //view类型2
	public static final int Z_TYPE = 2;//view 类型3
	private int type;
	private String text;

	public Bean(int type, String text) {
		super();
		this.type = type;
		this.text = text;
	}

	public int getType() {
		return type;
	}

	public void setType(int type) {
		this.type = type;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

}

然后是Adapter里面的代码:

package com.androidl.bob;

import java.util.List;

import com.example.androidl.R;

import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Date : 2014/7/15
 *
 * @author edsheng
 *
 */
public class RecycleAdapter extends RecyclerView.Adapter<ViewHolder> {

	private List<Bean> beans;

	public RecycleAdapter(List<Bean> beans) {
		super();
		this.beans = beans;
	}

	/**
	 * 内部TextHoler
	 *
	 * @author edsheng
	 *
	 */
	public class TextHoler extends RecyclerView.ViewHolder {
		public TextView textView;

		public TextHoler(View textview) {
			super(textview);
			this.textView = (TextView) textview.findViewById(R.id.mytext);
		}
	}

	/**
	 * iamgeHolder
	 *
	 * @author edsheng
	 *
	 */
	public class ImageHoler extends RecyclerView.ViewHolder {
		public ImageView Imageview;

		public ImageHoler(View textview) {
			super(textview);
			this.Imageview = (ImageView) textview.findViewById(R.id.myiamge);
		}
	}

	/**
	 * 按钮的holder
	 *
	 * @author edsheng
	 *
	 */
	public class ButtonHolder extends RecyclerView.ViewHolder {
		public Button button;

		public ButtonHolder(View textview) {
			super(textview);
			this.button = (Button) textview.findViewById(R.id.mybutton);
		}
	}

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

	/**
	 * 获取消息的类型
	 */
	@Override
	public int getItemViewType(int position) {
		// TODO Auto-generated method stub
		return beans.get(position).getType();
	}

	/**
	 * 创建VIewHolder
	 */
	@Override
	public ViewHolder onCreateViewHolder(ViewGroup parent, int viewtype) {
		// TODO Auto-generated method stub
		View v = null;
		ViewHolder holer = null;
		switch (viewtype) {
		case Bean.X_TYPE:
			v = LayoutInflater.from(parent.getContext()).inflate(
					R.layout.recylce_item_x, null);
			holer = new TextHoler(v);
			break;
		case Bean.Y_TYPE:
			v = LayoutInflater.from(parent.getContext()).inflate(
					R.layout.recylce_item_y, null);
			holer = new ButtonHolder(v);
			break;
		case Bean.Z_TYPE:
			v = LayoutInflater.from(parent.getContext()).inflate(
					R.layout.recylce_item_z, null);
			holer = new ImageHoler(v);
			break;
		}

		return holer;
	}

	/**
	 * 绑定viewholder
	 */
	@Override
	public void onBindViewHolder(ViewHolder holder, int position) {
		// TODO Auto-generated method stub
		switch (getItemViewType(position)) {
		case Bean.X_TYPE:
			TextHoler textholer = (TextHoler) holder;
			textholer.textView.setText(beans.get(position).getText());
			break;
		case Bean.Y_TYPE:
			ButtonHolder buttonHolder = (ButtonHolder) holder;
			buttonHolder.button.setText(beans.get(position).getText());
			break;
		case Bean.Z_TYPE:
			ImageHoler imageHoler = (ImageHoler) holder;
			// imageHoler.Imageview.setImageResource(android.R.drawable.checkbox_on_background);
			break;
		}
	}
}

最后是activity的代码。

package com.androidl.bob;

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;

import com.example.androidl.R;

public class Mainactivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_activity);
		 RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

//		// improve performance if you know that changes in content
//		// do not change the size of the RecyclerView
//		 mRecyclerView.setHasFixedSize(true);

		 //创建布局管理器
		LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
		mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
		mRecyclerView.setLayoutManager(mLayoutManager);

		//初始化数据
		List<Bean> myDataset = new ArrayList<Bean>();

		myDataset.add(new Bean(Bean.Z_TYPE, "图片"));
		myDataset.add(new Bean(Bean.X_TYPE, "文字"));
		myDataset.add(new Bean(Bean.Y_TYPE, "按钮"));
		myDataset.add(new Bean(Bean.Z_TYPE, "图片"));
		myDataset.add(new Bean(Bean.X_TYPE, "shit"));
		myDataset.add(new Bean(Bean.X_TYPE, "我擦"));
		myDataset.add(new Bean(Bean.Z_TYPE, "图片"));
		myDataset.add(new Bean(Bean.Y_TYPE, "按钮"));
		myDataset.add(new Bean(Bean.Y_TYPE, "按钮"));
		myDataset.add(new Bean(Bean.X_TYPE, "文字"));
		//创建Adapter
		RecycleAdapter mAdapter = new RecycleAdapter(myDataset);
		mRecyclerView.setAdapter(mAdapter);

	}

}

Demo传送门:开始传送

android L新控件RecyclerView详解与DeMo

时间: 2024-10-25 20:49:41

android L新控件RecyclerView详解与DeMo的相关文章

【转】Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用

Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用 分类: Android UI2015-06-15 16:44 1145人阅读 评论(5) 收藏 举报 MaterialDesingsupportlibrary 目录(?)[-] 前提 FloatingActionButton TextInputLayout Snackbar的使用 TabLayout [转载请注明出处:http://blog.csdn.n

Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用

[转载请注明出处:http://blog.csdn.net/feiduclear_up/article/details/46514791 CSDN 废墟的树] 上一篇博客我们学习了Android Design Support Library库中的 是个简单的组件,不了解的童鞋可以参考之前的博客 Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用. 这篇博客我们继续学习Design库中的其他四个组件,分别是

WebBrowser控件使用详解

WebBrowser控件使用详解 方法 说明 GoBack 相当于IE的“后退”按钮,使你在当前历史列表中后退一项 GoForward 相当于IE的“前进”按钮,使你在当前历史列表中前进一项 GoHome 相当于IE的“主页”按钮,连接用户默认的主页 GoSearch 相当于IE的“搜索”按钮,连接用户默认的搜索页面 Navigate 连接到指定的URL Refresh 刷新当前页面 Refresh2 同上,只是可以指定刷新级别,所指定的刷新级别的值来自RefreshConstants枚举表, 

【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用

Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用 分类: Android UI2015-06-17 19:46 1498人阅读 评论(7) 收藏 举报 supportandroidlibrary控件design 目录(?)[-] AppBarLayout CoordinatorLayout CollapsingToolbarLayout NavigationView [转载请

FileUpload上传控件用法详解 (转载)

FileUpload 类显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器.用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:\MyFiles\TestFile.txt )来指定要上载的文件.用户也可以通过单击“浏览” 按钮,然后在“选择文件” 对话框中定位文件来选择文件. 注意: FileUpload 控件设计为仅用于部分页面呈现期间的回发情况,并不用于异步回发情况.在 UpdatePanel 控件内部使用 FileUpload 控件时,

Android其它新控件 (转)

原文出处:http://blog.csdn.net/lavor_zl/article/details/51312715 Android其它新控件是指非Android大版本更新时提出的新控件,也非谷歌IO大会提出的新控件,而是谷歌发现市场上某种功能的控件被大量使用,而不定期推出实现该功能的官方控件.Android其它新控件常用的有下面两种. 1. Drawerlayout(抽屉布局) 抽屉布局的使用比较简单,一般在DrawerLayout下面定义两个视图,第一个视图作为主界面,第二个视图作为抽屉,

Android开发之基本控件和详解四种布局方式

Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局.而在Android中的布局方式就比较丰富了,今天博客中会介绍四种常用的布局方式.先总结一下控件,然后再搞一搞基本方式,开发环境还是用的Mac下的Android Studio.开始今天的正题, 虽然A

Android Design新控件之TextInputLayout(文本输入布局)

谷歌在推出Android5.0的同时推出了全新的设计Material Design,谷歌为了给我们提供更加规范的MD设计风格的控件,在2015年IO大会上推出了Design支持包,Design常用的新控件包括: TextInputLayout(文本输入布局) TabLaout(选项卡布局) Snackbar FloatingActionButton(浮动按钮) NavigationView(导航视图) AppBarLayout(程序栏布局) CoordinatorLayout(协作布局) Col

Android新控件RecyclerView剖析

传智·没羽箭(传智播客北京校区Java学院高级讲师) 个人简介:APKBUS专家之一,黑马技术沙龙会长,在移动领域有多年的实际开发和研究经验,精通HTML5.Oracle.J2EE .Java Web编程.对Android应用开发与平台开发有较深入研究.从基础到高级的课程中,授课风格深受学员的喜爱. Android L版本中新增了RecyclerView,用于显示复杂视图的新增Widget. 一.RecyclerView 替代ListView的RecyclerView使ViewHolder标准化