Android中关于notifyDataSetChanged()方法的注意
1、首先介绍下notifyDataSetChanged()方法的原理
notifyDataSetChanged方法原理
2、介绍下我在此处犯的错误
public class HomeFragment extends BaseFragment implements HomeContract.View{List<BookBean> allBooks;//TypeBookAdapter是自定义的一个adapter类TypedBookAdapter adapter;/*reFreshData的功能是想在MainActivity中刷新下HomeFragment类的对象homeFragment的数据,仅有allbooks的数据发生变化,adapter没有变*/public void reFreshData(){DbHelper helper = new DbHelper(getContext());allBooks = helper.getAllBooks();getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {adapter.notifyDataSetChanged();mRecyclerView.setAdapter(adapter);}});//System.out.println("refresh----"+allBooks.get(0).getLook_number());//update判定allBooks的内容是否发生了改变getContext().getSharedPreferences("book",MODE_PRIVATE).edit().putBoolean("update",false).commit();}
}
问题
在上述代码中发现adapter.notifyDataSetChanged()函数没有用,数据库中的数据其实已经改变了,但是为什么adapter不更新呢?
原因
经过好长时间的debug,终于发现原来是因为adapter本身没有改变,也就是说adapter在创建的时候传了allbooks过去,但是更新数据后没有对adapter中的allbooks改变,它仍然是初始化的时候的值,所以这时候在MainActivity中调用reFreshData()方法不会刷新数据。
解决办法
如下是他的解决办法
1、因为在TypedBookAdapter类中List books为私有成员变量,所以要想改变books的值必须先在TypedBookAdapter类中创建一个改变books值的公有方法
public void setBooks(List<BookBean> books) {this.books = books;
}
2、然后在调用adapter.notifyDataSetChanged();之前把调用adapter.setBooks(allBooks)方法即可
public class HomeFragment extends BaseFragment implements HomeContract.View{List<BookBean> allBooks;//TypeBookAdapter是自定义的一个adapter类TypedBookAdapter adapter;/*reFreshData的功能是想在MainActivity中刷新下HomeFragment类的对象homeFragment的数据,仅有allbooks的数据发生变化,adapter没有变*/public void reFreshData(){DbHelper helper = new DbHelper(getContext());allBooks = helper.getAllBooks();getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {adapter.setBooks(allBooks);adapter.notifyDataSetChanged();mRecyclerView.setAdapter(adapter);}});//System.out.println("refresh----"+allBooks.get(0).getLook_number());//update判定allBooks的内容是否发生了改变getContext().getSharedPreferences("book",MODE_PRIVATE).edit().putBoolean("update",false).commit();}
}
最后在这里吐槽下,一行代码的事,让我改了一上午。。。。。。
Android中关于notifyDataSetChanged()方法的注意相关推荐
- android中checkbox使用方法,Android开发中CheckBox的简单用法示例
本文实例讲述了Android开发中CheckBox的简单用法.分享给大家供大家参考,具体如下: CheckBox是一种在界面开发中比较常见的控件,Android中UI开发也有CheckBox,简单的说 ...
- android软件的data使用方法,实例讲解Android中SQLiteDatabase使用方法
SQLite数据库是android系统内嵌的数据库,小巧强大,能够满足大多数SQL语句的处理工作,而SQLite数据库仅仅是个文件而已.虽然SQLite的有点很多,但并不是如同PC端的mysql般强大 ...
- android中的add方法,Android入门之addWindow
前面说到,应用程序添加窗口时,会在本地创建一个ViewRoot,然后通过IPC(进程间通信)调用WmS的Session的addWindow请求WmS创建窗口,下面来看看addWindow方法. add ...
- android中的add方法,Android中Fragment怎么addView?
慕勒3428872 Fragment是Android honeycomb 3.0新增的概念,在Android--Fragment介绍.AndroidFragment使用.Android Fragmen ...
- android activity查询,android中activity.findViewById()方法查找的是什么?
//代码1: package com.example.testsdk2; import android.app.Activity; import android.content.Intent; imp ...
- android settext方法,Android中EditText setText方法的踩坑实战
1.平平常常中就这样开始 某一天,我准备做一个搜索功能,这个搜索功能呢大概是在主活动A中,用EditText接收输入,当EditText监听到输入框中内容有变化,跳转到活动B中,活动B中准备有搜索历史 ...
- Android中BottomSheetDialog使用方法(底部弹出的Dialog)
大家都知道IOS的很多菜单都是从底部弹出的,这种展示方式还是很好看的,而丑爆的Android默认弹框一直都是大家一定要摒弃的,那么我们Android如何做出相应效果的弹框.下面我们就介绍这种做法. 底 ...
- Android中的加密方法
http://www.cnblogs.com/whoislcj/p/5470095.html Android数据加密之Rsa加密 前言: 最近无意中和同事交流数据安全传输的问题,想起自己曾经使用过的R ...
- Android中SocketIo使用方法
如果你开发中遇到需要使用长连接的地方,尤其是需要使用到websocket,我们一般都是使用Android-websocket,或者使用okhttp进行链接.不过在众多选择中我比较倾向于使用socket ...
最新文章
- .NET Core 3.0 Preview 9 发布
- android分层测试,Android视图层次和性能的检测(官方)
- 前端学习(3251):样式的模块化
- java定义计算机类并模拟其操作
- FBI树-数据结构(二叉树)
- python打印国际象棋规则口诀_python输出国际象棋棋盘的实例分享
- mysql安装 demo [linux centos7] [5.7.26]
- laravel-admin 使用记录(1) - 安装
- python集成学习算法_python: 一句话说机器学习算法和调参-集成学习篇
- MYSQL时间函数之FROM_UNIXTIME
- pt100热电阻计算公式C语言,pt100计算公式,PT100实际应用中的两种形式
- 北京亿阳信通Oracle笔试题
- 学习pathon工具安装
- 计算机在职研究生科目,计算机在职研究生考试科目都有哪些?考试难吗
- Gson:GitHub 标星 18K 的 JSON 解析器,Google 出品的 Java JSON 解析器,强烈推荐!
- ABAP开发学习总结之一:ABAP入门基本要点
- 揭秘Pinterest模式生态:半年涌10家受困内容(转)
- Saturn PCB Design Toolkit分享
- 私人网盘搭建之centos下安装cloudreve
- 小发猫物联网平台搭建与应用模型
热门文章
- 白鹭引擎开发H5游戏(项目结构)
- linux svn revert,svn revert 复原整个目录
- 【科普】华为支付保护中心有什么用?
- UE 项目UI的快速设计和显示UI
- Multiple BSSID set 笔记
- Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集)
- 高并发热点缓存数据可能出现问题及解决方案
- 在ROS环境下控制magician机械臂的夹爪张开与闭合
- 如何简单地理解最小二乘法和线性回归方程?(高中数学知识)
- App Store审核被拒问题,及其解决方案(2.1、2.5.13、3.2.1、4.1、4.2.3、5.1.1、5.1.2、5.2.1)