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()方法的注意相关推荐

  1. android中checkbox使用方法,Android开发中CheckBox的简单用法示例

    本文实例讲述了Android开发中CheckBox的简单用法.分享给大家供大家参考,具体如下: CheckBox是一种在界面开发中比较常见的控件,Android中UI开发也有CheckBox,简单的说 ...

  2. android软件的data使用方法,实例讲解Android中SQLiteDatabase使用方法

    SQLite数据库是android系统内嵌的数据库,小巧强大,能够满足大多数SQL语句的处理工作,而SQLite数据库仅仅是个文件而已.虽然SQLite的有点很多,但并不是如同PC端的mysql般强大 ...

  3. android中的add方法,Android入门之addWindow

    前面说到,应用程序添加窗口时,会在本地创建一个ViewRoot,然后通过IPC(进程间通信)调用WmS的Session的addWindow请求WmS创建窗口,下面来看看addWindow方法. add ...

  4. android中的add方法,Android中Fragment怎么addView?

    慕勒3428872 Fragment是Android honeycomb 3.0新增的概念,在Android--Fragment介绍.AndroidFragment使用.Android Fragmen ...

  5. android activity查询,android中activity.findViewById()方法查找的是什么?

    //代码1: package com.example.testsdk2; import android.app.Activity; import android.content.Intent; imp ...

  6. android settext方法,Android中EditText setText方法的踩坑实战

    1.平平常常中就这样开始 某一天,我准备做一个搜索功能,这个搜索功能呢大概是在主活动A中,用EditText接收输入,当EditText监听到输入框中内容有变化,跳转到活动B中,活动B中准备有搜索历史 ...

  7. Android中BottomSheetDialog使用方法(底部弹出的Dialog)

    大家都知道IOS的很多菜单都是从底部弹出的,这种展示方式还是很好看的,而丑爆的Android默认弹框一直都是大家一定要摒弃的,那么我们Android如何做出相应效果的弹框.下面我们就介绍这种做法. 底 ...

  8. Android中的加密方法

    http://www.cnblogs.com/whoislcj/p/5470095.html Android数据加密之Rsa加密 前言: 最近无意中和同事交流数据安全传输的问题,想起自己曾经使用过的R ...

  9. Android中SocketIo使用方法

    如果你开发中遇到需要使用长连接的地方,尤其是需要使用到websocket,我们一般都是使用Android-websocket,或者使用okhttp进行链接.不过在众多选择中我比较倾向于使用socket ...

最新文章

  1. .NET Core 3.0 Preview 9 发布
  2. android分层测试,Android视图层次和性能的检测(官方)
  3. 前端学习(3251):样式的模块化
  4. java定义计算机类并模拟其操作
  5. FBI树-数据结构(二叉树)
  6. python打印国际象棋规则口诀_python输出国际象棋棋盘的实例分享
  7. mysql安装 demo [linux centos7] [5.7.26]
  8. laravel-admin 使用记录(1) - 安装
  9. python集成学习算法_python: 一句话说机器学习算法和调参-集成学习篇
  10. MYSQL时间函数之FROM_UNIXTIME
  11. pt100热电阻计算公式C语言,pt100计算公式,PT100实际应用中的两种形式
  12. 北京亿阳信通Oracle笔试题
  13. 学习pathon工具安装
  14. 计算机在职研究生科目,计算机在职研究生考试科目都有哪些?考试难吗
  15. Gson:GitHub 标星 18K 的 JSON 解析器,Google 出品的 Java JSON 解析器,强烈推荐!
  16. ABAP开发学习总结之一:ABAP入门基本要点
  17. 揭秘Pinterest模式生态:半年涌10家受困内容(转)
  18. Saturn PCB Design Toolkit分享
  19. 私人网盘搭建之centos下安装cloudreve
  20. 小发猫物联网平台搭建与应用模型

热门文章

  1. 白鹭引擎开发H5游戏(项目结构)
  2. linux svn revert,svn revert 复原整个目录
  3. 【科普】华为支付保护中心有什么用?
  4. UE 项目UI的快速设计和显示UI
  5. Multiple BSSID set 笔记
  6. Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集)
  7. 高并发热点缓存数据可能出现问题及解决方案
  8. 在ROS环境下控制magician机械臂的夹爪张开与闭合
  9. 如何简单地理解最小二乘法和线性回归方程?(高中数学知识)
  10. App Store审核被拒问题,及其解决方案(2.1、2.5.13、3.2.1、4.1、4.2.3、5.1.1、5.1.2、5.2.1)