我是從同一個問題深受其害這個問題時,錯誤項檢查:Wrong item checked when filtering ListView in android安卓:過濾列表視圖
如上問題的建議,我有一個持有的Hashset所有selectedIds,但我想不通了解如何在光標正在重新填充選中的項目時使用它。
我的問題只是化妝品 - 例如:
- 「臉譜」位於未過濾列表中的第5位。
- 用戶搜索「臉」,只有「Facebook」出現在過濾列表中的第一個位置。
- 用戶選中「Facebook」並選回未過濾列表。
- 選中的項目是列表中的第一個項目,而不是「Facebook」(位於第5個)。
注: 除了這個問題,一切的偉大工程。 例如,「刪除」將刪除正確的項目,因爲我使用selectedIds來執行它(即使檢查的項目是錯誤的)。
一個列表項單點擊:
OnItemClickListener mOnItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//gets the Bookmark ID of selected position
Cursor cursor = (Cursor)parent.getItemAtPosition(position);
String bookmarkID = cursor.getString(0);
boolean currentlyChecked = checkedStates.get(position);
checkedStates.set(position, !currentlyChecked);
if (!selectedIds.contains(bookmarkID)) {
selectedIds.add(bookmarkID);
selectedLines.add(position);
} else {
selectedIds.remove(bookmarkID);
selectedLines.remove(position);
}
}
};
光標內部: - 這就是問題所在。
這重新填充檢查的項目 - 問題是它通過位置(pos)和項目在過濾列表中的正確位置是什麼,不是它在未過濾列表中的位置 - 導致錯誤標記項目。
CheckedTextView markedItem = (CheckedTextView) row.findViewById(R.id.btitle);
markedItem.setChecked(checkedStates.get(pos));
希望得到任何幫助!
我對執行這個有點困惑。我有一個帶有listview的SimpleCursorAdapter。你如何初始化checkedStates,selectedIds和selectedLines? 此外,答案中提到的列表/哈希集確定項目是否需要自定義適配器或我可以使用SimpleCursorAdapter? – rohitmishra
@movingahead無法真正在這裏發佈代碼(解決了問題)...要麼開始一個新的問題或給我發電子郵件(我的暱稱在Gmail),我會盡力幫助。 –
我在這裏問了一個新問題http://stackoverflow.com/questions/9399941/implementing-a-listview-with-multiple-select-with-filter-using-a-cursor-adapter如果你能提供幫助,情況會很好。 – rohitmishra