notifydatasetinvalidated老出错?这几个常见问题要注意!

吉云

今儿个咱来聊聊我在捣鼓安卓开发时遇到的一个坑,跟notifyDataSetInvalidated()这个方法有关。说起来都是泪,不过也算吃一堑长一智,现在我把它记录下来,也给大伙儿提个醒。

我做的是一个列表展示的功能,用的是ListView。你知道的,ListView需要一个Adapter来提供数据。我写个自定义的Adapter,数据,是从服务器获取的。一切看起来都很美列表也能正常显示。

后来需求变,数据源可能要换。打个比方,原来数据是从“仓库A”拿的,现在要改成从“仓库B”拿。这可咋整?我寻思着,直接把Adapter里的数据源换掉不就得?

notifydatasetinvalidated老出错?这几个常见问题要注意!

于是我动手改代码。把数据源的地址给换,心想这下应该没问题。结果,我发现列表还是显示原来的数据!这可把我给整懵。我各种检查,确认数据源确实是换,可为啥列表就是不更新?

我开始在网上疯狂搜索,各种查资料,各种试。终于在一个犄角旮旯里找到notifyDataSetInvalidated()这个方法。这哥们儿是干啥的?简单来说,就是告诉ListView:“老兄,你的数据源已经‘失效’,赶紧重新加载一遍!”

我赶紧在切换数据源之后,加上这么一句:



notifydatasetinvalidated老出错?这几个常见问题要注意!

这一加,列表立马就更新!显示的是新数据源的内容。当时我那个激动,就像发现新大陆一样!

这里我得强调一下:

notifydatasetinvalidated老出错?这几个常见问题要注意!

  • notifyDataSetChanged()这个方法,它也能更新列表,但它只是告诉ListView数据有变化,ListView会尽量保持原来的状态,比如滚动的位置啥的。
  • notifyDataSetInvalidated()就不一样,它是告诉ListView,原来的数据已经完全不能用,你得从头开始,把整个列表重新布局一遍。

啥时候用哪个,你得看具体情况。像我这回数据源都换,那肯定得用notifyDataSetInvalidated(),让ListView彻底刷新一遍。

总结

notifydatasetinvalidated老出错?这几个常见问题要注意!

这回的经历让我明白一个道理:遇到问题,不能光埋头苦干,得多查资料,多看看别人是怎么做的。实践出真知,有些东西,你不亲自踩个坑,还真就体会不到。

希望我的这回分享能帮到你。记住,当你切换整个数据源的时候,一定要用notifyDataSetInvalidated()来通知你的列表进行刷新!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]