RecycleView的常用方法

  • setAdapter  设置列表的适配器,适配器采用 RecycleView.Adapter;
  • setLayoutManager  设置列表的的布局管理器,包括线性布局管理器 LinearLayoutManager、网格布局管理器GridLayoutManager、瀑布流网格布局管理器 StaggeredGridLayoutManager;
  • addItemDecoration 添加列表项的分割线;
  • removeItenDecoration 移除列表项的分割线;
  • setItemAnimator 设置列表项的增删动画。默认动画可使用系统自带的DefaultItemAnimator;
  • addOnItemTouchListener  添加列表项的触摸监听;
  • removeOnItemTouchListener  移除列表项的触摸监听。

RecycleView的适配器类——RecycleView.Adapter

在调用RecycleView的setAdapter()方法前,必须实现RecycleView.Adapter派生的数据匹配器。下面是RecycleView.Adapter相关的常用方法。

1.自定义适配器必须重写的方法

  • getItemCount  获取列表项的数目
  • onCreateViewHolder  创建整个布局的视图持有者。输入参数中包括视图类型,可根据视图类型家在不同的布局,从而实现带头部的列表布局
  • onBindViewHolder  绑定每项的视图持有者

2.可以重写也可以不重写的方法

  • getItemViewType  返回每项的视图类型。这里返回的视图提供onCreateViewHolder方法的使用

  • getItemId  获取每项的编号

3.可以直接调用的方法

  • scrollToPosition  滚动到指定的位置
  • notifyItemInserted  通知适配器在指定的位置加入新项
  • notifyItemRemoved  通知适配器在指定的位置删除原有项
  • notifyItemChanged  通知适配器在指定位置的项目已发生改变
  • notifyDataSetChanged  通知适配器整个列表的数据已发生改变

以下是我使用RecycleView的一个小Demo的部分代码。

Activity代码使用kotlin写的,在创建的时候需要创建Kotlin文件

先上图片:

代码如下:

MainActivity:

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.widget.LinearLayout
import com.example.wyt.recycleviewtest.Adapter.PeopleListAdapter
import com.example.wyt.recycleviewtest.entity.PeopleEntityclass MainActivity : AppCompatActivity() {var vwPeopleList: RecyclerView? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initView()}private fun initView() {vwPeopleList = findViewById(R.id.vw_recycle)val layoutManager = LinearLayoutManager(this)layoutManager.orientation = LinearLayout.VERTICALvwPeopleList!!.layoutManager = layoutManagerval adapter = PeopleListAdapter(this,PeopleEntity.getPeopleEntities())vwPeopleList!!.adapter = adapter}
}
PeopleEntity:
import com.example.wyt.recycleviewtest.R;import java.util.ArrayList;
import java.util.List;public class PeopleEntity {private String id;private String name;private String desc;private int imaId;public static List<PeopleEntity> getPeopleEntities() {List<PeopleEntity> peopleEntities = new ArrayList<PeopleEntity>();PeopleEntity peo1 = new PeopleEntity("蒙奇·D·路飞","蒙奇·D·路飞,日本漫画《航海王》的主角,外号“草帽”路飞,草帽海贼团、草帽大船团船长,极恶的世代之一。橡胶果实能力者,悬赏金15亿贝里。" +"梦想是找到传说中的One Piece,成为海贼王。\n" +"路飞性格积极乐观,爱憎分明,而且十分重视伙伴,不甘屈居于他人之下,对任何危险的事物都超感兴趣。和其他传统的海贼所不同的是," +"他并不会为了追求财富而杀戮,而是享受着身为海贼的冒险和自由。",R.mipmap.lufei);PeopleEntity peo2 = new PeopleEntity("罗罗诺亚·索隆","罗罗诺亚·索隆。人称:海贼猎人。日本漫画《\t海贼王\t》及衍生作品中的角色。“草帽一伙”的战斗员,是使用三把刀战斗的三刀流剑士。" +"两年前集结香波地群岛的被称之为“极恶的世代”的十一超新星之一。",R.mipmap.suolong);PeopleEntity peo3 = new PeopleEntity("娜美","娜美,人称小贼猫,悬赏6600万贝里。\n" +"特征是橘色的短发(两年后为波浪长发)和左肩的刺青(风车与橘子的图案)。使用棍术,现在武器为“魔法天候棒”。头脑聪明又机灵," +"精通气象学和航海术,能用身体感知天气,完美指示航路,是个能精确画出航海图的天才航海士。本质上是个细心、善良、重视感情、嫉恶如仇、偶尔有些温柔的能干的女性。" +"最喜欢钱和橘子,梦想是要画出全世界的地图。",R.mipmap.namei);peopleEntities.add(peo1);peopleEntities.add(peo2);peopleEntities.add(peo3);return peopleEntities;}public PeopleEntity(String name, String desc, int imaId) {this.name = name;this.desc = desc;this.imaId = imaId;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public int getImaId() {return imaId;}public void setImaId(int imaId) {this.imaId = imaId;}
}

DescActivity:

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView
import android.widget.TextView@Suppress("RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")
class DescActivity : AppCompatActivity() {var vwIma:ImageView? = nullvar vwName:TextView? = nullvar vwDesc:TextView? = nullvar imaId:Int? = nullvar names:String? = nullvar desc:String? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_desc)initDate()initView()}private fun initDate() {val intent = intentval bundle = intent.extrasnames = bundle.getString("name")imaId = bundle.getInt("imaId")desc = bundle.getString("desc")}private fun initView() {vwIma = this.findViewById(R.id.vw_ima)vwName = this.findViewById(R.id.vw_name)vwDesc = this.findViewById(R.id.vw_desc)vwIma!!.setImageResource(this.imaId!!)vwDesc!!.text = descvwName!!.text = names}
}
PeopleListAdapter:
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
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.ImageView;
import android.widget.TextView;import com.example.wyt.recycleviewtest.DescActivity;
import com.example.wyt.recycleviewtest.R;
import com.example.wyt.recycleviewtest.entity.PeopleEntity;import java.util.List;public class PeopleListAdapter extends RecyclerView.Adapter<PeopleListAdapter.PeopleListHolder> {private Context context;private List<PeopleEntity> mPeopleEntities;static class PeopleListHolder extends ViewHolder{ImageView vwIma;TextView vwName;Button vwClick;public PeopleListHolder(@NonNull View itemView) {super(itemView);vwIma = itemView.findViewById(R.id.vw_item_ima);vwName = itemView.findViewById(R.id.vw_item_name);vwClick = itemView.findViewById(R.id.vw_item_click);}}public PeopleListAdapter(Context context,List<PeopleEntity> peopleEntities){this.context = context;mPeopleEntities = peopleEntities;}@NonNull@Overridepublic PeopleListHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_recycle,viewGroup,false);return new PeopleListHolder(view);}@Overridepublic void onBindViewHolder(@NonNull PeopleListHolder peopleListHolder, final int i) {final PeopleEntity peopleEntity = mPeopleEntities.get(i);peopleListHolder.vwIma.setImageResource(peopleEntity.getImaId());peopleListHolder.vwName.setText(peopleEntity.getName());peopleListHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(context,DescActivity.class);Bundle bundle = new Bundle();bundle.putString("name",peopleEntity.getName());bundle.putString("desc",peopleEntity.getDesc());bundle.putInt("imaId",peopleEntity.getImaId());intent.putExtras(bundle);context.startActivity(intent);}});}@Overridepublic int getItemCount() {return mPeopleEntities.size();}
}

循环视图——RecycleView相关推荐

  1. Android Studio App开发之循环试图RecyclerView,布局管理器LayoutManager、动态更新循环视图讲解及实战(附源码)

    运行有问题或需要全部源码请点赞关注收藏后评论区留言~~~ 一.循环视图RecyclerView 尽管ListView和GridView分别实现了多行单列和多行多列的列表,使用也很简单,可是它们缺少变化 ...

  2. thinkphp6 循环 视图_ThinkPHP模板里怎么使用 for循环

    展开全部 ThinkPHP模板里使用 for循环 ①使62616964757a686964616fe59b9ee7ad9431333337613861用For标签 用法: 开始值.结束值.步进值和循环 ...

  3. thinkphp6 循环 视图_ThinkPHP模板循环输出Volist标签用法实例详解

    本文实例讲述了ThinkPHP模板循环输出Volist标签用法.分享给大家供大家参考,具体如下: volist 标签用于在模板中循环输出数据集或者多维数组. volist 标签 在模块操作中,sele ...

  4. android 将布局多次添加,android – 如何在布局xml中添加循环视图

    您无法将aar文件添加到Eclipse中的libs文件夹(它不是jar文件) 目前,使用新的RecyclerView的最佳方式是切换到Android Studio并将此依赖项添加到build.grad ...

  5. android在xml中加载大图,android – 如何在布局xml中添加循环视图

    您无法将aar文件添加到Eclipse中的libs文件夹(它不是jar文件) 目前,使用新的RecyclerView的最佳方式是切换到Android Studio并将此依赖项添加到build.grad ...

  6. AndroidApp学习笔记

    Android 发展历程 Android 是一个基于Linux 内核的自由及开发源代码的操作系统 2005 年 8 月由Google收购注资 2007年11月发布Android的源代码 2008 年1 ...

  7. 多视图点云配准算法综述

    作者:杨佳琪,张世坤,范世超等 转载自:华中科技大学学报(自然科学版) 编辑:东岸因为@一点人工一点智能 原文:​​多视图点云配准算法综述​​ 摘要:以多视图点云配准为研究对象,对近二十余年的多视图点 ...

  8. RecyclerView加载sdcard/Music下的音乐列表

    最近我在学习在学习RecyclerView,跟着老司机玩转App,<Android App 开发入门与项目实战>很友好,比较适合新手入门,通过基础知识和案例相结合,慢慢掌握其中要点. 书中 ...

  9. ASP.NET MVC Framework体验(2):显示列表数据

    概述 ASP.NET WebForm下,显示列表数据,经常会使用服务器控件GridView.DataList等.在ASP.NET MVC Framework中,我们有两种方式进行显示数据,一是使用行内 ...

最新文章

  1. 【每日一算法】有效的括号
  2. 2020-11-25(《深入理解计算机系统》多级页表详解)
  3. Linux16.04LTS 安装Intel RealSense D435驱动
  4. java的自动装配是什么意思_java – 什么时候在Spring中使用自动装配
  5. linux下Bash编程until语句及格式化硬盘分区等编写脚本(十)
  6. 报错型sql注入原理分析
  7. 机器学习中各类算法的优缺点比较
  8. php的 datetime,PHP DateTime-修改参考
  9. null最后如何排序的_LeetCode 148——排序链表
  10. _LINUX下的软件包管理 - zjlk
  11. onvif协议服务器端口,通过onvif协议接入海康、大华NVR步骤
  12. PLSQL Developer 安装使用教程详解
  13. mysql 分区原理_mysql 原理~ 分区表
  14. 有一台服务器,通过netstat -an命令看到大量状态SYN_RCVD的连接,可能发生的原因是什么?
  15. Emscripten 单词_人教版英语七年级下册单词、课文及音频汇总
  16. 基于stm32的grbl写字机器人(添加舵机支持)
  17. Qt | QTableView的使用方法
  18. php 时间戳与日期的转换
  19. 【R语言】Splatter,一个用于简单模拟单细胞RNA测序数据的R包
  20. Tecnomatix plant simulation HBW立库使用

热门文章

  1. TensorFlow Estimator 官方文档之----内置Estimator
  2. Flask03_路由传参
  3. 计算机毕业设计Java教育培训机构信息管理系统(源码+系统+mysql数据库+lW文档)
  4. 【php-fpm】重启、启动、关闭
  5. 高考,你们一定要加油
  6. JavaScript语法 ES6、ES7、ES8、ES9、ES10、ES11、ES12新特性汇总
  7. Java通过javacsv实现读取csv文件数据
  8. [uni-app]聊天App实例
  9. Git本地版本回退与远端版本回退(回滚)
  10. Android80go平台的桌面布局(带gms)