这是一个在ListView里进行条目的删除操作的DEMO,整体上功能比较全,界面不太好看,凑合看。先看截图
核心的代码如下,个别空间的背景选择器没有贴出来,自己搞一下就好了,少图片的自己补上。
package com.hongzhen.demo;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
import java.util.HashMap;
import java.util.List;
/**
* Created by hongzhen on 2017/8/18.
*/
public class ListViewItemDeleteAdapter extends BaseAdapter {
private List<HashMap<String, String>> mList;
private Context mContext;
public boolean isCheckBoxShow=false;
public ListViewItemDeleteAdapter(List<HashMap<String, String>> mList, Context mContext) {
this.mList = mList;
this.mContext = mContext;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int i) {
return mList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = View.inflate(mContext, R.layout.item_listview_delete, null);
viewHolder = new ViewHolder();
viewHolder.tvItem = (TextView) convertView.findViewById(R.id.item_tv);
viewHolder.cbItem = (CheckBox) convertView.findViewById(R.id.item_cb);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tvItem.setText(mList.get(i).get("CONTENT"));
if ("true".equals(mList.get(i).get("CHECK"))) {
viewHolder.cbItem.setChecked(true);
} else {
viewHolder.cbItem.setChecked(false);
}
if (isCheckBoxShow){
viewHolder.cbItem.setVisibility(View.VISIBLE);
}else {
viewHolder.cbItem.setVisibility(View.GONE);
}
return convertView;
}
public class ViewHolder {
private TextView tvItem;
public CheckBox cbItem;
}
}
package com.hongzhen.demo;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
/**
* Created by hongzhen on 2017/8/18.
*/
public class ListViewItemDeleteActivity extends Activity implements View.OnClickListener {
private ListView mListView;
private TextView tvDel;
private List<HashMap<String, String>> mList;
private TextView tvShow;
private LinearLayout llDel;
private TextView tvAll;
private TextView tvNoAll;
private TextView tvNo;
private TextView tvDelete;
private TextView tvReset;
private ListViewItemDeleteAdapter adapter;
private int checkNum;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview_item_delete);
initDate();
initView();
}
private void initView() {
mListView = (ListView) findViewById(R.id.listview);
adapter = new ListViewItemDeleteAdapter(mList,ListViewItemDeleteActivity.this);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//删除功能,选择功能
// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
ListViewItemDeleteAdapter.ViewHolder holder = (ListViewItemDeleteAdapter.ViewHolder) view.getTag();
// 改变CheckBox的状态
holder.cbItem.toggle();
// 将CheckBox的选中状况记录下来
// 调整选定条目
if (holder.cbItem.isChecked() == true) {
mList.get(i).put("CHECK", "true");
checkNum++;
} else {
mList.get(i).put("CHECK", "false");
checkNum--;
}
// 用TextView显示
tvShow.setText("已选中" + checkNum + "项");
}
});
tvDel = (TextView) findViewById(R.id.tv_del);
tvShow = (TextView) findViewById(R.id.tv_show);
llDel = (LinearLayout) findViewById(R.id.ll_del);
tvAll = (TextView) findViewById(R.id.tv_all);
tvNoAll = (TextView) findViewById(R.id.tv_no_all);
tvNo = (TextView) findViewById(R.id.tv_no);
tvDelete = (TextView) findViewById(R.id.tv_delete);
tvReset = (TextView) findViewById(R.id.tv_reset);
tvAll.setOnClickListener(this);
tvNoAll.setOnClickListener(this);
tvNo.setOnClickListener(this);
tvDel.setOnClickListener(this);
tvReset.setOnClickListener(this);
tvDelete.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.tv_del:
//删除界面
llDel.setVisibility(View.VISIBLE);
tvShow.setVisibility(View.VISIBLE);
adapter.isCheckBoxShow=true;
adapter.notifyDataSetChanged();
break;
case R.id.tv_all:
//全选
collectAll();
break;
case R.id.tv_no_all:
//反选
collectInverse();
break;
case R.id.tv_no:
//取消
llDel.setVisibility(View.GONE);
tvShow.setVisibility(View.GONE);
adapter.isCheckBoxShow=false;
adapter.notifyDataSetChanged();
break;
case R.id.tv_delete:
//删除
collectDel();
break;
case R.id.tv_reset:
//复位
collectReset();
break;
}
}
//反选择项
private void collectInverse() {
// 遍历list的长度,将已选的设为未选,未选的设为已选
for (int i = 0; i < mList.size(); i++) {
if (mList.get(i).get("CHECK").equals("true")) {
mList.get(i).put("CHECK", "false");
checkNum--;
} else {
mList.get(i).put("CHECK", "true");
checkNum++;
}
}
// 刷新listview和TextView的显示
dataChanged();
}
//删除已选择的项
private void collectDel() {
Iterator<HashMap<String, String>> iterator = mList.iterator();
while (iterator.hasNext()) {
HashMap<String, String> temp = iterator.next();
if (temp.get("CHECK").equals("true")) {
iterator.remove();
}
}
checkNum = 0;
// 通知列表数据修改
dataChanged();
}
// 初始化数据
private void initDate() {
mList=new ArrayList<>();
for (int i = 0; i < 50; i++) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("CONTENT", "data--"+i);
map.put("CHECK", "false");
mList.add(map);
}
}
//复位选择
private void collectReset() {
// 遍历list的长度,将MyAdapter中的map值全部设为true
for (int i = 0; i < mList.size(); i++) {
mList.get(i).put("CHECK", "false");
}
// 数量设为list的长度
checkNum = 0;
// 刷新listview和TextView的显示
dataChanged();
}
//全选操作
private void collectAll() {
// 遍历list的长度,将MyAdapter中的map值全部设为true
for (int i = 0; i < mList.size(); i++) {
mList.get(i).put("CHECK", "true");
}
// 数量设为list的长度
checkNum = mList.size();
// 刷新listview和TextView的显示
dataChanged();
}
//反选
// 刷新listview和TextView的显示
private void dataChanged() {
// 通知listView刷新
adapter.notifyDataSetChanged();
// TextView显示最新的选中数目
tvShow.setText("已选中" + checkNum + "项");
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="@color/white"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dim_title_height"
android:background="@color/title_background" >
<ImageView
android:id="@+id/iv_back"
android:layout_width="@dimen/dim_title_width"
android:layout_height="@dimen/dim_title_width"
android:layout_centerVertical="true"
android:src="@drawable/btn_return_selector" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:paddingBottom="@dimen/dim_margin_five"
android:paddingTop="@dimen/dim_margin_five"
android:text="ListView条目删除"
android:textColor="@color/title_color"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_del"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:paddingBottom="@dimen/dim_margin_five"
android:paddingTop="@dimen/dim_margin_five"
android:text="删除"
android:textColor="@color/title_color"
android:textSize="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
<LinearLayout
android:visibility="gone"
android:id="@+id/ll_del"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/dim_padding_s" >
<TextView
android:textAlignment="gravity"
android:gravity="center"
android:layout_weight="1"
android:textColor="@color/black"
android:textSize="15sp"
android:padding="5dp"
android:text="全选"
android:layout_marginRight="5dp"
android:id="@+id/tv_all"
android:background="@drawable/text_del_selector"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<TextView
android:background="@color/gray"
android:layout_width="0.5dp"
android:layout_height="match_parent"/>
<TextView
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp"
android:textAlignment="gravity"
android:gravity="center"
android:layout_weight="1"
android:textColor="@color/black"
android:textSize="15sp"
android:padding="5dp"
android:text="反选"
android:id="@+id/tv_no_all"
android:background="@drawable/text_del_selector"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<TextView
android:background="@color/gray"
android:layout_width="0.5dp"
android:layout_height="match_parent"/>
<TextView
android:textAlignment="gravity"
android:gravity="center"
android:layout_weight="1"
android:textColor="@color/black"
android:textSize="15sp"
android:padding="5dp"
android:text="复位"
android:layout_marginRight="5dp"
android:id="@+id/tv_reset"
android:background="@drawable/text_del_selector"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<TextView
android:background="@color/gray"
android:layout_width="0.5dp"
android:layout_height="match_parent"/>
<TextView
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp"
android:textAlignment="gravity"
android:gravity="center"
android:layout_weight="1"
android:textColor="@color/black"
android:textSize="15sp"
android:padding="5dp"
android:text="取消"
android:id="@+id/tv_no"
android:background="@drawable/text_del_selector"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<TextView
android:background="@color/gray"
android:layout_width="0.5dp"
android:layout_height="match_parent"/>
<TextView
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp"
android:textAlignment="gravity"
android:gravity="center"
android:layout_weight="1"
android:textColor="@color/black"
android:textSize="15sp"
android:padding="5dp"
android:text="删除"
android:id="@+id/tv_delete"
android:background="@drawable/text_del_selector"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</LinearLayout>
<TextView
android:textColor="@color/black"
android:visibility="gone"
android:id="@+id/tv_show"
android:layout_marginLeft="10dp"
android:textSize="15sp"
android:text="已选择"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/gray" />
<ListView
android:id="@+id/listview"
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#aaa"
android:orientation="horizontal">
<ImageView
android:id="@+id/item_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/item_tv"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"/>
<CheckBox
android:visibility="gone"
android:id="@+id/item_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="center_vertical"/>
</LinearLayout>