在实际开发中有好多多选删除的使用场景,我们现在遇到的是,listview 里边是一个 BaseAdapter 出来的列表
简单分析下,大概是需要这样操作,首先 listview的 item项里要有一个 多选框 这个多选框 默认是隐藏的。
一般情况下 点击是要进入详情页面。然后长按的话进入多选删除操作。所以我们这里要设定两个事件 分别为:
OnClickListener 和 OnLongClickListener
先看下布局文件中 设置了 checkBox 不可以被点击 以及隐藏 ,同时我还 设置了一个全局变量。去判断此时是否处雨多选状态。
以及全局设置了一个 map 。map 中存储了 每个项的id 以及选中状态。 这样在调用 Adapter的getView 方法时候可以去去根据多选
状态 以及 是否选中 去进行 选中操作
OnLongClickListener 事件 点击后进入操作状态。设置 CheckBox 显示 设置全局变量为多选状态
OnClickListener 根据多选状态 做操作
<CheckBox
android:id="@+id/cb_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_gravity="center"
android:clickable="false"
/>
class Videoad extends BaseAdapter {
@Override
public int getCount() {
return videosList.size();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
// 1.解析布局文件 成为VIEW
LayoutInflater inflater = LayoutInflater.from(getActivity());
View view1 = inflater.inflate(R.layout.my_videocollect_item, viewGroup, false);
//2.填充数据
CheckBox cb_select = view1.findViewById(R.id.cb_select);
if(isselect){
cb_select.setVisibility(View.VISIBLE);
if(deletemap.get(cid+"")){
cb_select.setChecked(true);
}else{
cb_select.setChecked(false);
}
}
LinearLayout video_item = view1.findViewById(R.id.video_item);
final int vid = videosList.get(i).getId();
video_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(isselect){
boolean isseelctitem = deletemap.get(""+cid);
if(isseelctitem ){
deletemap.put(""+cid,false);
}else{
deletemap.put(""+cid,true);
}
videoad.notifyDataSetChanged();
}else{
Intent intent = new Intent(getActivity().getApplicationContext(),Videodetail.class);
intent.putExtra("id", vid);
startActivity(intent);
}
}
});
video_item.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
isselect = true;
deleteall.setVisibility(View.VISIBLE);
videoad.notifyDataSetChanged();
return false;
}
});
return view1;
}
}