Android5.0 v7扩展包之RecyclerView

Android5.0 v7扩展包之RecyclerView

Android开发文章androidRecyclerView

近日Google发布了Android5.0 SDK,随之android L的部分预览功能也发布了正式版本。本文将介绍RecyclerView。

RecylerView简介

The RecyclerView widget is a more advanced and flexible version of ListView. This widget is a container for displaying large data sets that can be scrolled very efficiently by maintaining a limited number of views. Use the RecyclerView widget when you have data collections whose elements change at runtime based on user action or network events.

大意是RecylerView是一个高级的ListView。可以很好的维护大数据集的滚动和显示。详细的解释参考这里。本文的内容也是基于此而写。

RecylerView在那里包名:android.support.v7.widget.RecyclerView文件地址有两个1:android-sdk/extras/android/m2repository/com/android/support/recyclerview-v72:android-sdk/extras/android/support/v7/recyclerviewRecylerView怎么引用Android Studiodependencies {compile ‘com.android.support:recyclerview-v7:21.0.0’}

在此推荐使用Android Studio开发Android项目

Eclipse

以下猜测可以使用,没有经过测试。

在android-sdk/extras/android/support/v7/recyclerview目录下面有libs,里面有jar包,引用此jar包。在android-sdk/extras/android/m2repository/com/android/support/recyclerview-v7目录下根据版本号21.0.0目录可以找到一个名为recyclerview-v7-21.0.0.aar的文件。解压此文件里面有classes.jar,引用此jar包。找不到目录

针对找不到目录的同学,,打开Android SDK Manager把最新的资源更新下来即可。

RecylerView新类介绍

说说几个新类,Adapter(android.support.v7.widget.RecyclerView.Adapter)、ViewHolder(android.support.v7.widget.RecyclerView.ViewHolder)、LayoutManager(android.support.v7.widget.RecyclerView.LayoutManager)

Adapter

适配器,和以前的Adapter不一样,此Adapter为RecylerView特有。作为一个抽象类,有以下几个抽象方法。

Adapter<VH extends ViewHolder>{}{…public abstract VH onCreateViewHolder(ViewGroup parent, int viewType);(VH holder, int position);();…}方法onCreateViewHolder

直接创建一种可复用的VH或者根据viewType创建多种VH。

方法onBindViewHolder

数据和VH通过位置position绑定

方法getItemCount

返回有多少条数据

ViewHolder

同样是一个抽象类,我们通过继承此类实现view的封装。

LayoutManager

布局管理器,RecylerView中数据显示布局方式。目前v7包种提供了三种模式,分别是LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager。

LinearLayoutManager

线性布局,通过方向VERTICAL和HORIZONTAL可以实现垂直和水平的效果。默认为VERTICAL垂直方向。

通过此布局可以实现ListView的效果。垂直方向为普通的ListView显示效果,水平方向即是水平滑动的ListView。

GridLayoutManager

网格布局,继承于LinearLayoutManager,可以指定有几行和方向。通过此布局可以实现GridView的效果,同样有垂直方向和水平方向。

StaggeredGridLayoutManager

交错网格布局,类似于网格布局,但每个格子的高度或者长度可以不一样。俗称的瀑布流效果,同样有垂直方向和水平方向。

实例代码

实例代码会列出一个完整的通过RecylerView、LinearLayoutManager、Adapter、ViewHolder实现一个普通的ListView数据显示效果,之后修改部分代码实现不同的效果。

ListView引入的包dependencies {compile fileTree(dir: ‘libs’, include: [‘*.jar’])compile ‘com.android.support:appcompat-v7:21.0.0’compile ‘com.nostra13.universalimageloader:universal-image-loader:1.9.3’compile ‘com.android.support:recyclerview-v7:21.0.0’compile ‘org.roboguice:roboguice:2.0’compile ‘com.android.support:palette-v7:21.0.0’}Activitypackage com.lizheng.recylerviewdemo;import android.os.Bundle;import android.os.Handler;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import roboguice.activity.RoboFragmentActivity;import roboguice.inject.InjectView;{@InjectView(R.id.recyclerView)private RecyclerView recyclerView;@InjectView(R.id.swipeLayout)private SwipeRefreshLayout swipeLayout;private DemoAdapter adapter;(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.ac_main);adapter = new DemoAdapter(C.picUrls);// 线性布局管理器LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);// 设置布局管理器recyclerView.setLayoutManager(linearLayoutManager);recyclerView.setAdapter(adapter);// 模拟下拉刷新swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {() {new Handler().postDelayed(new Runnable() {() {swipeLayout.setRefreshing(false);adapter.notifyDataSetChanged();}}, 2000);}});}}Adapter和ViewHolderpackage com.lizheng.recylerviewdemo;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.nostra13.universalimageloader.core.ImageLoader;/** * 适配器 * Created by lizheng on 14/10/19. */public class DemoAdapter extends RecyclerView.Adapter<DemoAdapter.DemoViewHolder> {String[] picUrls;public DemoAdapter(String[] picUrls) {this.picUrls = picUrls;}@Overridepublic DemoViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {// 加载数据item的布局,生成VH返回View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_test, viewGroup, false);return new DemoViewHolder(v);}@Override(DemoViewHolder demoViewHolder, int i) {// 数据绑定ImageLoader.getInstance().displayImage(picUrls[i], demoViewHolder.imavPic);demoViewHolder.tvUrl.setText(picUrls[i]);}@Override() {// 返回数据有多少条if (null == picUrls) {return 0;}return picUrls.length;}DemoViewHolder extends RecyclerView.ViewHolder {// 大图public ImageView imavPic;// 图片urlpublic TextView tvUrl;public DemoViewHolder(View itemView) {super(itemView);imavPic = (ImageView) itemView.findViewById(R.id.imavPic);tvUrl = (TextView) itemView.findViewById(R.id.tvUrl);}}}Activity布局=="match_parent"tools:context=".MainActivity"><View="match_parent"android:layout_height="48dp" /><android.support.v4.widget.SwipeRefreshLayout="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerView=></RelativeLayout>item布局==="vertical"><ImageView="150dp"android:scaleType="centerCrop" /><TextView="wrap_content"android:lines="2" /><View>效果图躲在某一地点,想念一个站在来路,

Android5.0 v7扩展包之RecyclerView

相关文章:

你感兴趣的文章:

标签云: