对于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; }