pom*_*ber 15 android listview android-arrayadapter baseadapter
我正在实现一个自定义ArrayAdapter<T>,我想将其设置hasStableIds为true.但我的T项的ID是字符串,getItemId方法返回long.
所以,我目前正在做的是:
@Override
public boolean hasStableIds() {
return true;
}
@Override
public long getItemId(int position) {
return this.getItem(position).getId().hashCode();
}
Run Code Online (Sandbox Code Playgroud)
当getId()返回一个字符串.
这是使用String ID的正确解决方案吗?
特别是,对于这种情况,String Ids是GUID,有更好的选择吗?
您不想使用,hashCode()因为这样,两个不同的GUIDS可能会产生相同的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
Run Code Online (Sandbox Code Playgroud)
性能影响可以忽略不计。
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |