首次加載數據之后初始化Map集合,我使用的treeMap
/**
* 初始化map集合,默認為不選中
*/
private void initMap(boolean flag) {
for (int i = 0; i < mAdapter.getData().size(); i++) {
deleteMap.put(i, flag);
}
}
Adapter配置方法用于判斷checkBox是否顯示,默認false,不顯示
private boolean flag = false;
/**
* checkBox是否出現
*
* @param flag checkBox是否出現
*/
private void changeFlag(boolean flag) {
this.flag = flag;
}
適配器內用于判斷,是否顯示
if (flag ) {
checkBox.setVisibility(View.VISIBLE);
} else {
checkBox.setVisibility(View.GONE);
}
添加點擊事件用于更新map
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
deleteMap.put(position, isChecked);
}
});
通過map對應的值,用于更新checkBox是否要勾選的狀態
if (View.VISIBLE == checkBox.getVisibility()) {
checkBox.setChecked(deleteMap.get(position));
}
設置點擊跳轉,刪除裝天下點擊既為勾選,更新map數據,通知適配器
deleteMap.put(position, true);
mAdapter.notifyDataSetChanged();
長按狀態下,變為刪除狀態,刪除狀態下,長按直接return turn;變為刪除狀態,顯示checkBox,顯示取消和全選view,更新該條數據為勾選狀態,通知適配器
mAdapter.changeFlag(true);
deleteView.setVisibility(View.VISIBLE);
deleteMap.put(position, true);
mAdapter.notifyDataSetChanged();
點擊取消,首先清空map數據,重新賦值全部為false,隱藏checkBox,再通知適配器,隱藏全選view(關于,不清空,直接重新賦值,因為刪除數據之后map長度會有變化(賦值根據新的數據長度)),刪除成功之后也是要重新賦值
deleteMap.clear();
initMap(false);
mAdapter.changeFlag(false);
mAdapter.notifyDataSetChanged();
deleteView.setVisibility(View.GONE);
全選按鈕,首先清空集合,重新賦值,全部為true,再通知適配器
deleteMap.clear();
initMap(true);
mAdapter.notifyDataSetChanged();
點擊刪除時,遍歷map,使用StringBuilder拼接要刪除的條目ID
StringBuilder workId = new StringBuilder();
for (Map.Entry<Integer, Boolean> map : deleteMap.entrySet()) {
if (map.getValue()) {
String string = mAdapter.getData().get(map.getKey()).getWorkId() + ";";
workId.append(string);
}
}
刪除成功后倒敘刪除適配器中所刪除的條目,清空map集合,重新賦值,全部為false,隱藏checkBox和全選view以及通知適配器
for (int i = mAdapter.getData().size() - 1; i >= 0; i--) {
if (deleteMap.get(i)) {
mAdapter.remove(i);
}
}
deleteMap.clear();
initMap(false);
mAdapter.changeFlag(false);
mAdapter.notifyDataSetChanged();
deleteView.setVisibility(View.GONE);
另外隱藏和動態顯示時,再xml中父view添加
android:animateLayoutChanges="true"
效果不會那么突兀