- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在实现自定义 ArrayAdapter<T>
, 我想设置 hasStableIds
为真。但是我的 T 项目的 ID 是 Strings 和 getItemId
方法返回 longs。
所以,我目前正在做的是:
@Override
public boolean hasStableIds() {
return true;
}
@Override
public long getItemId(int position) {
return this.getItem(position).getId().hashCode();
}
在哪里getId()
返回一个字符串。
这是使用字符串 ID 的正确解决方案吗?
特别是,对于这种情况,字符串 ID 是 GUID,是否有更好的选择?
最佳答案
您不想使用 hashCode()
,因为这样,两个不同的 GUID 可能会产生相同的 ID。
只需编写一个映射。像这样的……
private static class GuidToIdMap {
private final Map<String, Long> guidToIdMapping = new HashMap<String, Long>();
private final Map<Long, String> idToGuidMapping = new HashMap<Long, String>();
private long idGenerator = 0;
public long getIdByGuid(final String guid) {
if ( ! guidToIdMapping.containsKey(guid)) {
final long id = idGenerator++;
guidToIdMapping.put(guid, id);
idToGuidMapping.put(id, guid);
}
return guidToIdMapping.get(guid);
}
public String getGuidById(final long id) {
if (idToGuidMapping.containsKey(id)) {
return idToGuidMapping.get(id);
}
return null;
}
}
private final GuidToIdMap guidToIdMap = new GuidToIdMap();
@Override
public boolean hasStableIds() {
return true;
}
@Override
public long getItemId(int position) {
final String guid = this.getItem(position).getId();
return guidToIdMap.getIdByGuid(guid);
}
// Use guidToIdMap.getGuidById(id) where the Android Framework passes you the generated id
性能影响可以忽略不计....
关于android - 带有 hasStableIds 的适配器,使用 GUID 或字符串作为 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26169319/
我有一个 ListView,它使用 BaseAdapter 的子类。适配器使用项目索引(位置)作为 ID,因此 ID 不稳定(对底层数据的操作之一是在两个数据项之间交换)。 我是否需要在我的适配器中覆
我正在使用 ExpandableListView 创建应用程序,我引用了一些教程。hasStableIds () 设置为 false?使 hasStableIds() 为 false 的确切需要是什么
我目前正在玩hasStableIds回收商的观点,我有以下观察结果: 1) 当hasStableIds = false : 一旦notifyDataSetChanged()调用,它将使所有 View
我一直在努力理解 BaseAdapter.hasStableIds() 是如何工作的。 据我所知,从此方法返回 true 有助于适配器确定是否必须重新创建 View 或保持不变。我猜适配器以某种方式将
我在 gridview 中处理动画,发现 hasStableIds() 被覆盖并返回 true 以保持项目的稳定 id。我想知道这如何影响我的 GridView 的性能?这是否增加了为每个项目保持稳定
我正在实现自定义 ArrayAdapter , 我想设置 hasStableIds为真。但是我的 T 项目的 ID 是 Strings 和 getItemId方法返回 longs。 所以,我目前正在做
我是一名优秀的程序员,十分优秀!