android RecyclerView的基本介绍及用法(一)
来源:互联网 发布:jquery实现数据分页 编辑:程序博客网 时间:2024/05/21 17:20
本篇介绍一个更好用更强大的滑动组件 – RecyclerView。
简介:
RecyclerView 是 android-support-v7 包中的控件,它的功能效果类似ListView,其特点有:
RecyclerView 的Item可以回收复用,当然,这不是一个新功能,ListView中就有此机制。但是ListView的回收等功能是紧密耦合在一起的,而 RecyclerView使方法更灵活,开发者也能自定义各种各样的显示效果。并且 ViewHolder 是直接被封装起来的,我们只要实现自己的 ViewHolder 即可。
和ListView不一样的是,RecyclerView不再负责Item的摆放等显示方面的功能。所有和布局、绘制等方面的工作Google将其拆分成不同的类进行管理,开发者可以自定义各种各样满足定制需求的的功能类。
① RecyclerView.Adapter:托管数据集合,为每个Item创建视图。
②RecyclerView.ViewHolder:承载Item视图的子视图。
③RecyclerView.LayoutManager:负责Item视图的布局。
④RecyclerView.ItemDecoration:为每个Item视图绘制Divider。
⑤RecyclerView.ItemAnimator 添加、删除数据时的动画效果。RecyclerView 使用布局管理器管理子view的位置,将 layout 抽象成了一个 LayoutManager, 我们可以通过 LayoutManager 来实现不同的布局效果。比如:线性 ListView、横向 ScrollView、GridView、瀑布流等类似效果都可以很容易的实现。
LinearLayoutManager提供了如下几个方法来帮助开发者获取屏幕上的顶部item和底部item:
findFirstVisibleItemPosition()
findFirstCompletelyVisibleItemPosition()
findLastVisibleItemPosition()
findLastCompletelyVisibleItemPosition()RecyclerView 自带了ItemAnimation,可以设置加载和移除时的动画,方便做出各种动态浏览的效果。提供了默认动画效果:DefaultItemAnimator,当然也可以继承 LayoutManager 自定义动画效果。
为了让动画效果起效,开发者必须通知Adapter数据有改变。RecyclerView.Adapter提供了许多通知方法,例如:
public final void notifyItemInserted(int position)
public final void notifyItemRemoved(int position)RecyclerView 中没有提供 OnItemClickListener 和 OnItemLongClickListener 的监听事件,需要自己在adapter里面写接口实现。
用法:
基本使用效果图
首先记得添加 v7包 。
直接上代码:
适配器MyRecyclerViewAdapter.java
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;/** * Created by jia on 2015/10/16. */class MyRecyclerViewAdapter extends RecyclerView.Adapter { private Context context; private List<String> list; public MyRecyclerViewAdapter(Context context, List<String> list) { this.context = context; this.list = list; } /** * onCreateViewHolder中负责为Item创建视图 * * @param viewGroup * @param i * @return */ @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { /*初始化填充RecyclerView的item*/ View viewItem = LayoutInflater.from(context).inflate(R.layout.list_item, viewGroup, false); /*返回自定义的ViewHolder*/ MyViewHolder myViewHolder = new MyViewHolder(viewItem); return myViewHolder; } /** * onBindViewHolder负责将数据绑定到Item的视图上。 * * @param viewHolder * @param position */ @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { /*将接收到的ViewHolder强转成自定义的VIewHolder*/ final MyViewHolder myViewHolder = (MyViewHolder) viewHolder; /*为Item设置数据*/ myViewHolder.getIdView().setText(list.get(position)); myViewHolder.getNameView().setText("name"); } /** * 本方法决定了绘制item的数量 * * @return */ @Override public int getItemCount() { return list.size(); } class MyViewHolder extends RecyclerView.ViewHolder { private TextView idView; private TextView nameView; public MyViewHolder(View itemView) { super(itemView); idView = (TextView) itemView.findViewById(R.id.id); nameView = (TextView) itemView.findViewById(R.id.name); } public TextView getIdView() { return idView; } public TextView getNameView() { return nameView; } }}
使用RecyclerView的步骤:
①实例化RecyclerView;
②设置布局管理器LayoutManager;
③可以设置一个或多个ItemDecorations,也可以不设置;
④可以设置ItemAnimator,默认动画DefaultItemAnimator;
⑤设置Adapater适配数据。
主界面MainActivity.java
package com.practice.jia.recyclerviewblog;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import java.util.ArrayList;import java.util.List;public class MainActivity extends ActionBarActivity { private RecyclerView recyclerView; private MyRecyclerViewAdapter adapter; private List<String> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.recyclerView); initData(); /* * 初始化一个布局管理器,这里是默认的竖直线性,效果如上图所示 * 其实完整写法为: * LinearLayoutManager manager = new LinearLayoutManager(context, orientation, reverseLayout); * 其中三个参数分别表示: * 1.context:上下文 * 2.orientation:布局方向; * LinearLayoutManager.VERTICAL:竖直方向(默认) * LinearLayoutManager.HORIZONTAL:水平方向 * 3.reverseLayout:布局数据是否反向;false:正常(默认);true:反向; * 下边的写法就相当于:new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); */ LinearLayoutManager manager = new LinearLayoutManager(this); recyclerView.setLayoutManager(manager); adapter = new MyRecyclerViewAdapter(MainActivity.this, list); recyclerView.setAdapter(adapter); } /** * 初始化集合,添加数据 */ private void initData() { list = new ArrayList<>(); for (int i = 0; i < 100; i++) { list.add("id:" + i); } }}
下面看一下其他效果:
/*竖直列表,布局数据不反向,效果类似传统ListView*/LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);/*竖直列表,布局数据反向*/LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, true);/*横向列表,布局数据正常,效果类似横向ScrollView*/LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);/*横向列表,布局数据反向*/LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true);
/* *GridLayoutManager效果相当于Gridview * new GridLayoutManager(context,spanCount, orientation, reverseLayout); * 四个参数分别表示: * 1.context:上下文 * 2.spanCount:列数(横向就是行数),相当于Gridview的numColumns属性 * 3.orientation:布局方向; * LinearLayoutManager.VERTICAL:竖直方向(默认) * LinearLayoutManager.HORIZONTAL:水平方向 * 4.reverseLayout:布局数据是否反向;false:正常(默认);true:反向; *//*竖直表格列表,3列,布局数据不反向,效果类似传统GridView*/GridLayoutManager manager = new GridLayoutManager(this, 3, LinearLayoutManager.VERTICAL, false);/*竖直表格列表,3列,布局数据反向*/GridLayoutManager manager = new GridLayoutManager(this, 3, LinearLayoutManager.VERTICAL, true);/*横向表格列表,3行,布局数据正常*/GridLayoutManager manager = new GridLayoutManager(this, 3, LinearLayoutManager.HORIZONTAL, false);/*横向表格列表,3行,布局数据反向*/GridLayoutManager manager = new GridLayoutManager(this, 3, LinearLayoutManager.HORIZONTAL, true);
RecyclerView的布局管理器很强大,当然也可以自定义,这些只是简单的介绍。
- android RecyclerView的基本介绍及用法(一)
- RecyclerView 使用方法总结(一):RecyclerView的基本用法,及实现ListView
- RecyclerView的基本用法 (一)
- recyclerview的基本用法(一)
- Android RecyclerView的基本用法
- Android中RecyclerView的基本用法
- Android控件RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- RecyclerView的基本用法
- Spring事务管理
- UVA-230 图书管理系统
- Android中Acition和Category常量表
- VC中RichEdit 控件的使用
- sklearn 逻辑回归
- android RecyclerView的基本介绍及用法(一)
- 大一新生的开学日记
- SOAPUI系列12- 使用 SOAPUI 执行负载测试
- Java序列化与反序列化
- 杭电OJ 1102(Constructing Roads)解题报告
- overlay网络技术之VXLAN详解
- MySQL数据丢失讨论
- NET使用了UpdatePanel后如何弹出对话框!
- Java中String类的方法及说明