Is there any difference between `ListView.invalidateViews()` and 'Adapter.notifyDataSetChanged()'?
Asked Answered
D

1

18

Is there any difference between ListView.invalidateViews() and Adapter.notifyDataSetChanged()?

Devault answered 20/5, 2012 at 19:58 Comment(0)
R
40

Well yes, there is.

ListView.invalidateViews() is used to tell the ListView to invalidate all its child item views (redraw them). Note that there not need to be an equal number of views than items. That's because a ListView recycles its item views and moves them around the screen in a smart way while you scroll.

Adapter.notifyDataSetChanged() on the other hand, is to tell the observer of the adapter that the contents of what is being adapted have changed. Notifying the dataset changed will cause the listview to invoke your adapters methods again to adjust scrollbars, regenerate item views, etc...

Most of the time you would want to use notifyDataSetChanged instead of invalidateViews, but it certainly depends on what you are trying to accomplish.

Repp answered 20/5, 2012 at 20:1 Comment(8)
I am little confused when you say Note that there not need to be an equal number of views than items . What is the difference between views and items.Devault
@black crow: A listview does not create a view per item. Instead it usually has only the number of views that would fit in the screen plus one, and moves them around as you scroll. In plain words: it does not create views for items that are not visible.Repp
You have space for 10 views on the screen and you have 20 in your adapter... so you have 10 views and 20 items.Gardie
@Gardie Thanks. Can you give one example where invalidateViews will be useful?Devault
@black crow: That is a hard example to find. If you do everything right, then invalidateViews will only be useful if you need to redraw the visible items yet nothing on them has changed...Repp
@GauravAgarwal: A good use of invalidateViews would be to change the font size of your ListView: you don't touch the data, but the rendering.Everhart
A good example is a list of running timers, you update the text only, but not the number of itemsPal
Another example is suppose you want to decode the emoticons to display images, while the images are still being loaded from disk. You would call invalidate views once they are loadedSectorial

© 2022 - 2024 — McMap. All rights reserved.