Android中RecyclerView简介、创建步骤及其Demo
来源:互联网 发布:学linux能干哪些工作 编辑:程序博客网 时间:2024/03/29 07:10
一、RecyclerView的简述
RecyclerView是support.v7包中的控件,可以说是ListView和GridView的增强升级版。
RecyclerView并不需要我们去优化,其自身已经做了优化,内部自动复用view对象。这也是RecyclerView最方便的一点,极大的优化了代码。
二、RecyclerView的实现步骤
1.RecyclerView环境的配置(依赖库)
3.在Activity中实例化RecyclerView控件
4.创建RecyclerView适配器继承自RecyclerView.Adapter<适配器类名.ViewHolder>,并指定泛型为适配器类名.ViewHolder(ViewHolder继承RecyclerView.ViewHolder)
5.在适配器中添加构造方法,用于在适配器中接受数据
6.在onCreateViewHolder中通过布局管理器(inflate)添加一个view视图,并实例化自定义的ViewHolder类,传入view视图对象,再返回ViewHolder。
7.在onBindViewHolder方法里绑定ViewHolder和数据
8.在内部类ListViewHolder的构造方中接收onCreateViewHolder传过来的view对象,并实例化view对象里的控件;之后,实现setData()方法,接受DataBean对象,然后给控件赋值,从DataBean中拿数据。
9.在getItemCount方法中返回RecyclerView的条目数
10.在Activity中创建适配器,设置适配器,创建布局管理器,设置布局管理器(注:必须要创建布局管理器并设置,否则不显示)
DataBean.java
MyRecyclerViewAdapter.java
activity_mian.xml
recyclerview_item.xml
RecyclerView是support.v7包中的控件,可以说是ListView和GridView的增强升级版。
RecyclerView并不需要我们去优化,其自身已经做了优化,内部自动复用view对象。这也是RecyclerView最方便的一点,极大的优化了代码。
二、RecyclerView的实现步骤
1.RecyclerView环境的配置(依赖库)
2.在XML文件中添加一个RecyclerView控件
<android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
3.在Activity中实例化RecyclerView控件
4.创建RecyclerView适配器继承自RecyclerView.Adapter<适配器类名.ViewHolder>,并指定泛型为适配器类名.ViewHolder(ViewHolder继承RecyclerView.ViewHolder)
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ListViewHolder> { public ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return null; } public void onBindViewHolder(ListViewHolder holder, int position) { } public int getItemCount() { return 0; } public class ListViewHolder extends RecyclerView.ViewHolder { public ListViewHolder (View itemView) { super(itemView); } }}
5.在适配器中添加构造方法,用于在适配器中接受数据
private Context context;private List<DataBean> databean;//构造方法,一般需要接受两个参数,上下文,集合对象(包含我们的数据)public RecyclerViewAdapter(Context context, List<DataBean> databean) { this.context = context; this.databean = databean;}
6.在onCreateViewHolder中通过布局管理器(inflate)添加一个view视图,并实例化自定义的ViewHolder类,传入view视图对象,再返回ViewHolder。
//创建ViewHolder(相当于item),并把ViewHolder返回出去。@Overridepublic ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //转换一个view布局对象,决定item的样子,参数:1.上下文 2.XML布局资源 3.为null View view = View.inflate(context, R.layout.item_list, null); //创建一个ViewHolder对象 ListViewHolder listViewHolder = new ListViewHolder(view); //把创建出来的ViewHolder对象传出去 return listViewHolder;}
7.在onBindViewHolder方法里绑定ViewHolder和数据
//当ViewHolder和数据绑定时,回调@Overridepublic void onBindViewHolder(ListViewHolder holder, int position) { //从集合里拿对应item的数据对象 DataBean dataBean = databean.get(position); //给holder里面的控件对象设置数据 holder.setData(dataBean);}
8.在内部类ListViewHolder的构造方中接收onCreateViewHolder传过来的view对象,并实例化view对象里的控件;之后,实现setData()方法,接受DataBean对象,然后给控件赋值,从DataBean中拿数据。
//自动帮我们写的ViewHolder,参数:view对象public class ListViewHolder extends RecyclerView.ViewHolder { private final ImageView mIvicon; private final TextView mTvname; public ListViewHolder(View itemView) { super(itemView); mIvicon = (ImageView)itemView.findViewById(R.id.item_list_iv_icon); mTvname = (TextView) itemView.findViewById(R.id.item_list_tv_name); } public void setData(DataBean dataBean) { //给imageview设置图片数据 mIvicon.setImageResource(dataBean.icon); //给TextView设置文本数据 mTvname.setText(dataBean.name); }}
9.在getItemCount方法中返回RecyclerView的条目数
//决定RecyclerView有多少条@Overridepublic int getItemCount() { //数据不为null,有几条数据就显示几条数据 ??? if (databean != null&& databean.size()>0) { return databean.size(); } return 0;}
10.在Activity中创建适配器,设置适配器,创建布局管理器,设置布局管理器(注:必须要创建布局管理器并设置,否则不显示)
//创建适配器adapterRecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(this,datas);//设置适配器recyclerview.setAdapter(recyclerViewAdapter);//布局管理器所需参数,上下文LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);//设置布局管理器recyclerview.setLayoutManager(linearLayoutManager);
三、代码示例
MainActivity.java
package com.zhiyuan3g.recyclerviewexercise;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import com.zhiyuan3g.recyclerviewexercise.adapter.MyRecyclerViewAdapter;import com.zhiyuan3g.recyclerviewexercise.bean.DataBean;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private RecyclerView recyclerview; private DataBean mDataBean; private ArrayList<DataBean> mList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); mList = new ArrayList<>(); createdata(); setRecyclerViewAdapter(); } private void setRecyclerViewAdapter() { MyRecyclerViewAdapter myRecyclerViewAdapter = new MyRecyclerViewAdapter(this, mList); recyclerview.setAdapter(myRecyclerViewAdapter); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); recyclerview.setLayoutManager(linearLayoutManager); } private void createdata() { for (int x=0; x<34 ;x++){ mDataBean = new DataBean(); mDataBean.Icon=R.mipmap.ic_launcher; mDataBean.name="Recyclerview"+x; mList.add(mDataBean); } } private void initView() { recyclerview = (RecyclerView) findViewById(R.id.recyclerview); }}
DataBean.java
package com.zhiyuan3g.recyclerviewexercise.bean;/** * * Function: Bean类的下的变量类型是根据需要哪些数据来决定 */public class DataBean { public int Icon; public String name;}
MyRecyclerViewAdapter.java
package com.zhiyuan3g.recyclerviewexercise.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.zhiyuan3g.recyclerviewexercise.R;import com.zhiyuan3g.recyclerviewexercise.bean.DataBean;import java.util.ArrayList;/** * * Function:RecyclerView的适配器 */public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder>{ private Context context; private ArrayList<DataBean> list; public MyRecyclerViewAdapter(Context context, ArrayList<DataBean> list) { this.context=context; this.list=list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.recyclerview_item, null); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { DataBean dataBean = list.get(position); holder.setData(dataBean); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder { private final ImageView mImageView; private final TextView mName; public ViewHolder(View itemView) { super(itemView); mImageView = (ImageView) itemView.findViewById(R.id.icon_img); mName = (TextView) itemView.findViewById(R.id.name_tv); } public void setData(DataBean dataBean) { mImageView.setImageResource(dataBean.Icon); mName.setText(dataBean.name); } }}
activity_mian.xml
<?xml version="1.0" encoding="utf-8"?><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.zhiyuan3g.recyclerviewexercise.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView></RelativeLayout>
recyclerview_item.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/icon_img" android:layout_width="75dp" android:layout_height="75dp"/> <TextView android:id="@+id/name_tv" android:layout_toRightOf="@+id/icon_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="hahhf" android:textSize="20dp" /></RelativeLayout>
效果图:
完整Demo代码下载:http://pan.baidu.com/s/1mhY31Yo
0 0
- Android中RecyclerView简介、创建步骤及其Demo
- Android RecyclerView使用Demo
- Android-RecyclerView 实现步骤
- Android中GPS简介及其应用
- Android中创建AIDL服务的步骤
- Android Studio中创建JAVA应用程序步骤
- Android开发模板------RecyclerView简介
- BAPI简介及创建步骤
- 简单的Android RecyclerView 使用小Demo
- activiti工作流程序demo创建步骤
- 【Android 基础】RecyclerView 概述以及使用步骤
- android中RecyclerView
- android中使用RecyclerView
- Android中RecyclerView刷新
- Android中RecyclerView
- Android中RecyclerView用法
- Android单元测试创建步骤
- Android中应用contentprovider来创建数据库的一些步骤:
- 重温数据结构一
- CSS中的背景用法大全
- 【第14题】360校园招聘2015届技术类笔试题
- Java_HOME,classpath,path的作用及其配置
- 数组中的重复数字 の HashMap解法
- Android中RecyclerView简介、创建步骤及其Demo
- 从键盘连续输入一组数,对每一个数按位求和,输出和数最大者
- js各种验证文本框输入格式
- 种子用户
- 小练习
- 【第15题】360校园招聘2015届技术类笔试题
- jsp操作数据库之修改
- 什么,听说3分钟入门Cython??
- 特征选择与降维总结