对于Activity A中的ListView列表,点击一项进入详细信息页面Activity B,在详细信息页面编辑后,再回到Activity A,这时会希望看到最新更新的内容,但是更新整个列表太耗时,有没有办法只更新一项呢?
这里可以考虑重写getView方法,把改变后的数据传递过来,如果改变的那一项在屏幕范围内,就重写getView。
主要代码:
/**
* 更新listview某一行
*
* @param itemIndex
*/
public void updateView(int itemIndex) {
HashMap<String, Object> target = mAppList.get(itemIndex);
int start = mListView.getFirstVisiblePosition();
for (int i = start, j = mListView.getLastVisiblePosition(); i <= j; i++)
if (target == mListView.getItemAtPosition(i)) {
View view = mListView.getChildAt(i - start);
mListView.getAdapter().getView(i, view, mListView);
break;
}
}
第二个问题,ListView数据项是ArrayList<HashMap<String, Object>>,从Activity B传递过来的是一个HashMap<String,Object>,怎么更新ArrayList。
主要代码:
listItem.remove(mLastPosition);
listItem.add(mLastPosition, hashMap);
第三个问题,Intent只能传递基本数据类型,怎么在两个Activity之间传递HashMap类型的数据,可以写一个继承自Application的类,通过set ,get共享数据,但是用完后别忘了释放哦
public HashMap<String, Object> hashMap;
public void setHashmap(HashMap<String, Object> map) {
this.hashMap = map;
}
public HashMap<String, Object> getHashmap() {
return hashMap;
}