notifyDataSetChanged vs setAdapter

我知道当我想要适配器显示更新的数据时,使用notifyDataSetChanged会更有效率。 但是,由于我的devise,我想每次重置适配器,当我需要它来显示新的数据。 与使用notifidatasetChanged相比,这样的决定会增加多less成本(在执行时间方面)?

Solutions Collecting From Web of "notifyDataSetChanged vs setAdapter"

有点晚了,但我不喜欢拉格纳的回答,因为它不能解释所有的事情。

基本上,

myListAdapter.notifyDataSetChanged() 

VS

 setListAdapter(new ArrayAdapter(myList)); 

在性能上会非常相似( notifyDataSetChanged并不是那么无辜):一步一步debugging,看它触发了所有的变更观察者 – 底层列表的每个元素 – 通知他们有关的变化)。

在这种情况下,性能不是你所追求的。 根据项目的总体结构,两者可以或多或less地可读/可维护。 主要区别在于,通过重新创build适配器,您将失去现有状态状态破坏了用户与列表交互的产物 – 滚动位置,行select,交互期间可能已经引入的改变。

总之,如果你的devisebuild议你应该重新创build并重新分配适配器,那么你可以保持这个实现。 虽然更可靠和用户友好的是调用notifyDataSetChange

友善的build议

你应该考虑改变devise。

很高兴地说,但并不总是适用的(例如,一个人可能在一个团队中工作,或者维护一个他没有任何控制/资源来重新实现一切的应用程序)。

由于我的devise

你应该考虑改变devise。

与使用notifidatasetChanged相比,这样的决定会增加多less成本(在执行时间方面)?

我不喜欢谈论“多less内存”“内存泄漏”等,但请把这种情况想象成“正常人”。

你可以把你的目标想像成一座新房子。 你曾经build造房子。 一切都很好,但后来,你想要一些改变! 所以你要做一些改变,例如改变颜色,用新的replace窗户,join一些避难所等,你会做什么?

你会拆房子? 或者你只会做出改变?

我想这个答案你已经知道了。 为什么你不想拆房子,只能做出改变?

  • build造新房子花费太多(如果你不是比尔·盖茨)
  • 这是浪费时间(变化会更快,成本更低)

同样是销毁和分配新的适配器。 这是浪费时间,最大效率低下, “至less对我来说不舒服”

在适配器中进行更改(如添加新项目,更新旧的,更改行颜色等)效率更高,更干净,更快。 API已经为您提供了如何实现它的方法。

我认为你的devise理念不正确和高效,你应该回顾一下你最终会做什么。 试着想想男人。 希望这个答案能让你的事情更清楚。