首次加载数据之后初始化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"
效果不会那么突兀