全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈Android为RecyclerView增加监听以及数据混乱的小坑

为 RecyclerView增加监听

1、在实现好的MyAdapter中写内部接口:

public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
  this.onItemLongClickListener = onItemLongClickListener;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
  this.onItemClickListener = onItemClickListener;
}
<!--点击监听-->
public interface OnItemClickListener {
  void onItemClick(View view, int pos);
}

<!--长按监听-->
public interface OnItemLongClickListener {
  void onItemLongClick(View view, int position);
}

2、继续在MyAdapter中增加以下代码:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

private OnItemClickListener onItemClickListener;
private OnItemLongClickListener onItemLongClickListener;
      ......

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

  final int pos = holder.getLayoutPosition();
  holder.mTextView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
      if (onItemClickListener != null)
        onItemClickListener.onItemClick(view, pos);
    }
  });

  holder.mTextView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
      if (onItemLongClickListener != null) {
        onItemLongClickListener.onItemLongClick(view, pos);
      }
      return true;
    }
  });

}
}

以上代码是接口一般的写法,没什么难度,需要注意的是几个局部刷新的方法。

3、为了将性能提升至极致,RecyclerView的视图中某个item数据变化时,RecyclerView.Adapter提供几个局部刷新数据视图的方法:

//该方法用于当增加一个数据的时候,position表示新增数据显示的位置
final void notifyItemInserted(int position)

//该方法用于删除一个数据的时候,position表示数据删除的位置
final void notifyItemRemoved(int position)

//该方法表示所在position对应的item位置不会改变,但是该item内容发生变化
final void notifyItemChanged(int position)

//当然也还有老方法全部刷新,该方法一般用于:适配器之前装载的数据大部分已经过时了,需要重新更新数据调用 
//该方法的时候,recyclerView会重新计算子item及所有子item重新布局,简单但是效率低并且不带默认的动画:

final void notifyDataSetChanged()

出于效率考虑,官方建议用更加精确的方法(比如上面三个方法)来取代这个方法:

①.在RecyclerView.ViewHolder中说提及position(下标)时,有两种情况:

i.由ViewHolder的 getLayoutPosition() 方法返回的,是视图中 itemView 的下标

i.由ViewHolder的 getAdapterPosition() 方法返回的,是Adapter数据集(如ArrayList) data元素 的下标.

正常时,第几个itemView上显示地接个data的内容,两者一一对应。

②. 但是在使用局部刷新的几个方法时要注意,我们知道,一个数据集比如ArrayList,移除某个元素时,它后面的元素会向前填充,所以后面每个元素的下标都会减一;

③. 然而对于 getLayoutPosition() 来讲,当我们用 notifyItemInserted 方法移除掉一个itemView时,视图上看后面的itemView会挤上去,但是它们的下标是没有变的。比如十个itemView(下标0到9)我用 notifyItemInserted 方法移除了第三个, 那么视图中剩下的itemView的下标就是(0,1和3到9), 这时候再去对数据集调用remove(9)的话势必会抛出数组越界异常;

④. 因此在每次刷新后,要使用 notifyItemRangeChanged(int positionStart,int itemCount) 调整itemView的下标,使其和数据集的下标始终是一一对应。其中 positionStart 是第一个改变的itemView下标,itemCount指它后面下标也需要改变的itemView个数

以上是RecyclerView的初级具体使用方法。

这篇浅谈Android为RecyclerView增加监听以及数据混乱的小坑就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# recyclerview监听  # 适配Android 8.0版本更新安装与通知栏的一些坑  # 浅谈Android Studio3.0更新之路(遇坑必入)  # Android Studio升级到3.0后遇到的坑  # 浅析Android Studio 3.0 升级各种坑(推荐)  # 详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅  # 详解关于Android Studio中安装和gradle的一些坑  # Android 启动activity的4种方式及打开其他应用的activity的坑  # 深踩Android Studio 缓存的坑及解决方法  # Android WebView使用的技巧与一些坑  # Android 8.0中一些坑以及对应的解决方法  # 几个  # 移除  # 给大家  # 的是  # 第一个  # 我用  # 希望能  # 使其  # 上看  # 再去  # 当我们  # 这篇  # 有两种  # 第三个  # 不带  # 浅谈  # 时要  # 中说  # 需要注意  # 抛出 


相关文章: 威客平台建站流程解析:高效搭建教程与设计优化方案  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何在香港服务器上快速搭建免备案网站?  详解jQuery停止动画——stop()方法的使用  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  代刷网站制作软件,别人代刷火车票靠谱吗?  如何在VPS电脑上快速搭建网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  制作网站的基本流程,设计网站的软件是什么?  高性价比服务器租赁——企业级配置与24小时运维服务  如何在腾讯云服务器上快速搭建个人网站?  高防服务器:AI智能防御DDoS攻击与数据安全保障  上海网站制作开发公司,上海买房比较好的网站有哪些?  网站制作难吗安全吗,做一个网站需要多久时间?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  招商网站制作流程,网站招商广告语?  如何打造高效商业网站?建站目的决定转化率  建站主机SSH密钥生成步骤及常见问题解答?  如何快速上传建站程序避免常见错误?  如何快速生成橙子建站落地页链接?  如何用y主机助手快速搭建网站?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  建站主机如何选?性能与价格怎样平衡?  TestNG的testng.xml配置文件怎么写  如何选择网络建站服务器?高效建站必看指南  建站主机助手选型指南:2025年热门推荐与高效部署技巧  如何通过商城自助建站源码实现零基础高效建站?  nginx修改上传文件大小限制的方法  如何在云服务器上快速搭建个人网站?  如何在IIS服务器上快速部署高效网站?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  建站之星如何优化SEO以实现高效排名?  建站之星伪静态规则如何正确配置?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  Python lxml的etree和ElementTree有什么区别  建站之星备案流程有哪些注意事项?  如何通过多用户协作模板快速搭建高效企业网站?  黑客如何利用漏洞与弱口令入侵网站服务器?  购物网站制作公司有哪些,哪个购物网站比较好?  javascript中的try catch异常捕获机制用法分析  北京企业网站设计制作公司,北京铁路集团官方网站?  C#怎么创建控制台应用 C# Console App项目创建方法  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  东莞专业制作网站的公司,东莞大学生网的网址是什么?  制作网站的公司有哪些,做一个公司网站要多少钱?  如何在Windows环境下新建FTP站点并设置权限? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。