我知道,当我希望适配器显示更新的数据时,使用notifyDataSetChanged更有效。然而,由于我的设计,我想每次重置适配器,当我需要它来显示新的数据。与使用notifidatasetChanged相比,这样的决策会增加多少成本(就执行时间而言)?
发布于 2015-03-12 12:02:54
有点晚了,但我不喜欢拉格纳的反应,因为这并不能解释一切。
基本上,
myListAdapter.notifyDataSetChanged() vs
setListAdapter(new ArrayAdapter(myList));性能将非常相似(notifyDataSetChanged并不是那么天真:一步一步地调试,以确保它触发所有更改观察者--底层列表中的每个元素--以通知他们更改的情况)。
在这种情况下,性能不是您所追求的。根据项目的总体结构,两者都可以或多或少地可读性/可维护性。但是,主要的区别在于,通过重新创建适配器,您将失去现有的状态。状态破坏用户与列表交互的产品--滚动位置、行选择、可能在交互过程中引入的更改。
最后,如果您的设计建议重新创建和重新分配Adapter,您可以保留该实现。然而,更可靠和更友好的是调用notifyDataSetChange。
类建议
你应该考虑一下改变设计。
可以这么说,但并不总是适用的(例如,一个人可能在一个团队中工作,或者维护一个没有控制/资源来重新实现一切的应用程序)。
发布于 2013-11-30 15:59:29
因为我的设计
你应该考虑一下改变设计。
与使用notifidatasetChanged相比,这样的决策会增加多少成本(就执行时间而言)?
我不喜欢谈论“多少记忆”,“记忆泄漏”等,但请将这种情况想象为“正常人”。
你可以用新建的房子来想象你的目标。你曾经建过房子。一切都很好,但是以后,你想要一些零钱!所以你要做一些改变,比如改变颜色,用新的窗户代替窗户,加入到房子里,等等,你会怎么做?
,你要拆毁房子吗?或者你只会做些改变?
我想你已经知道这个答案了。为什么你不想拆掉房子,而只做些改变?
破坏和分配新适配器也是如此。这是浪费时间,效率极低,“至少对我来说不舒服”。
对适配器进行更改(例如添加新项、更新旧项、更改行颜色等)。更有效率,更干净,更快。API已经为您提供了如何实现它的方法。
我认为你的设计理念是不正确和有效的,你应该回顾一下你最终要做什么。试着想想男人。希望这个答案能让你的事情更清楚。
https://stackoverflow.com/questions/20301677
复制相似问题