我正在实现一个ExpandableListView的ListAdapter,在工作时我看到我需要覆盖函数boolean hasStableIds().谁能解释一下,稳定ids的含义是什么?什么时候需要这个?
Del*_*yan 58
稳定的ID允许ListView
优化notifyDataSetChanged
调用之间项目保持不变的情况.它引用的ID是从中返回的ID getItemId
.
没有它,ListView
必须重新创建所有View
s,因为它无法知道数据更改之间的项ID是否相同(例如,如果ID只是数据中的索引,则必须重新创建所有内容).有了它,它可以避免重新创建View
保留其项目ID的s.
Dan*_*okh 21
如果hasStableIds()
返回false,那么每次调用notifyDataSetChanged()
适配器时都会查看返回的值,getItemId
并且最终getView(int position, View convertView, ViewGroup parent)
只调用id已更改的thous项.
使用此技术,您可以轻松更新ListView中的一个项目
如果你getItemId
正确实现,那么它可能非常有用.
示例:
你有一个专辑列表:
class Album{
String coverUrl;
String title;
}
Run Code Online (Sandbox Code Playgroud)
你实现getItemId
这样:
@Override
public long getItemId(int position){
Album album = mListOfAlbums.get(position);
return (album.coverUrl + album.title).hashCode();
}
Run Code Online (Sandbox Code Playgroud)
现在你的item id取决于coverUrl和title字段的值,如果你更改它们并调用notifyDataSetChanged()
你的适配器,那么适配器将调用每个元素的getItemId()方法并仅更新id已更改的项.
如果您正在进行一些"重"操作,这非常有用getView()
.
归档时间: |
|
查看次数: |
17356 次 |
最近记录: |