DiffUtil和LiveData使用时遇到的问题
android在28之后换成了androidx,在此之前也可以用到这些功能,不过是引入的包不同,写法也有一些小的差别。我们之前的代码使用的是BaseQuickAdapter,所以不可以直接使用JetPack那一套东西,我把DiffUtil和LiveData以及ViewModel挑出来使用,这三个正好组成一套,可以局部刷新。在局部刷新的实现非常的简单,但是我却碰到了一个麻烦,以至于我花了四天的时间才找到问题点,所以必须要写下来。
我先说一下,我这个是聊天界面,所以第一页有一个未读消息数,如果进入到聊天界面未读消息数就清零,问题就出在我从聊天界面退出的时候仍然显示未读消息数,查看数据未读消息数是零,也就是说界面显示的和adapter中的数据不一样。一开始我怀疑adapter中的data数据被改了,所以我开始监视这个List,结果一无所获,除了在LiveData中修改adapter中List的数据,再也没有其它的操作。尝试各种方法用了三天时间,直接第四天我决定变换一下思路,没有偷改列表,有没有可能是列表中的值在其它地方被改掉了。事实证明确实是这个问题。我通过EventBus收到一个消息之后就把这个消息放到了adapter的列表中了,这个对象其它地方也在使用,打开聊天界面的时候它就被清零了,所以从聊天界面返回时DiffUtil发现未读消息数是一样的,不需要刷新。解决的办法就是收到消息之后clone这个对象,至于深浅大家看自己的需要,我这里需要关心的未读数是int,所以浅clone就可以了。
DiffUtil和LiveData使用时遇到的问题的更多相关文章
- Cookie使用时需要注意个数及大小限制
各浏览器对Cookie有一定的限制,在使用时需要格外注意. 各浏览器之间对cookie的不同限制: IE6.0 IE7.0/8.0/9.0+ Opera FF Safari Chrome cook ...
- EntityFrameWork 使用时碰到的小问题
EntityFrameWork 使用时碰到的小问题 1,在使用orm访问数据库的相目里,也要引用EntityFrameWork.dll,否则无法使用orm 否则,编译错误 错误 5 "Sys ...
- MySQL 安装和启动服务,“本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”
MySQL 安装和启动服务,以及遇到的问题 MySQL版本: mysql-5.7.13-winx64.zip (免安装,解压放到程序文件夹即可,比如 C:\Program Files\mysql-5. ...
- MaterialCalendarView使用时遇到的问题
一.概述 MaterialCalendarView是一个开源项目.功能强大支持多选.单选.标注等. 二.问题 1.其继承自ViewGroup,故与CalendarView半毛钱关系都没有,完全是一个新 ...
- [备忘][转]rsync使用时的常见问题
sync使用时的常见问题: 错误1: rsync: read error: Connection reset by peer (104) rsync error: error in rsync pro ...
- 小白学数据分析----->移动游戏的使用时长分析
写下该文章,是因为之前看到了几款游戏一个典型的玩家刺激活动,在<多塔联盟>,<萌江湖>等多款游戏的设计中都有体现,如下图所示: 这个功能点的设计,今天在这里讲的更多的还是跟数据 ...
- VS2010 使用时选择代码或双击时出错,点击窗口按钮后VS自动重启问题
VS2010 使用时选择代码或双击时出错崩溃,点击窗口按钮后VS自动重启问题 下载补丁,打上补丁之后,重启电脑,解决了问题. WindowsXP的下载地址:Windows XP 更新程序 (KB971 ...
- [开发笔记]-sqlite数据库在使用时遇到的奇葩问题记录
有时候做些简单的项目一般都会选择sqlite数据库,优点有很多,这里就不详细说了. 在此主要记录一些平时在使用时遇到的问题及解决方法.希望能对大家有所帮助. --------------------- ...
- 本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。——Oracle监听器服务无法启动!
问题: oracle服务设置为手动启动.但是开机后手动启动监听服务后弹出框,提示“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止.某些服务在未由其他服务或程 ...
随机推荐
- vue.js-动态绑定class 利用index实现导航
<template> <div class="stock"> <div class="buin_leftcont nav_ctrl" ...
- NAT地址转换常用命令详解
缺省值:没有启用NAT. 命令模式:全局配置模式. 说明:静态NAT主要用于那些对需要对外部用户开放的服务,如Web服务器等,它可以把本地地址映射为指定的全局地址. 第一种格式实现的是一对一的NAT映 ...
- python 生成随机红包
假设红包金额为money,数量是num,并且红包金额money>=num*0.01 原理如下,从1~money*100的数的集合中,随机抽取num-1个数,然后对这些数进行排序,在排序后的集合前 ...
- [redis]redis五种数据类型和应用场景
一.String(字符串)字符串类型是redis最基础的数据结构,首先键是字符串类型,而且其他几种结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习尊定基础.字符串类型实际上可 ...
- Django FBV CBV以及使用django提供的API接口
FBV 和 CBV 使用哪一种方式都可以,根据自己的情况进行选择 看看FBV的代码 URL的写法: from django.conf.urls import url from api import v ...
- python爬虫小实例
1.python爬取贴吧壁纸 1.1.获取整个页面数据 #coding=utf-8 import urllib def getHtml(url): page = urllib.urlopen(url) ...
- java:solr
1.solr(数据导入solr自带数据库): ImportItemController.java: package com.solr.controller; import org.springfr ...
- 来吧,认识一下Bugcrowd社区的开源课程
what Bugcrowd? 类似于360补天等众测平台. bugcrowd大学 类似于漏洞银行推出的开源教学资源. 使用指南(网页直接谷歌翻译) 研究员researchers:指的就是我们白帽子. ...
- base64图片数据类型转numpy的ndarray矩阵类型数据
1.两种方法如下链接 https://www.cnblogs.com/mtcnn/p/9411683.html 2.第一种方法: # coding: utf-8 # python base64 编解码 ...
- C++学习笔记-多态
多态作为面向对象的重要概念,在如何一门面向对象编程语言中都有着举足轻重的作用,学习多态,有助于更好地理多态的行为 多态性(Polymorphism)是指一个名字,多种语义:或界面相同,多种实现. 重载 ...