效果图如图所示:
什么都不多说了 ,我直接贴代码!
主活动布局如下:
listview_long_checked_delete_demo:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listview_long_checked_delete_demo_listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/listview_long_checked_delete_demo_relativelayout1"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</ListView>
<RelativeLayout
android:id="@+id/listview_long_checked_delete_demo_relativelayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:visibility="gone"
>
<Button
android:id="@+id/listview_long_checked_delete_demo_button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="40dp"
android:layout_toRightOf="@+id/listview_long_checked_delete_demo_button4"
android:text="@string/listview_long_checked_delete_demo_button3" />
<Button
android:id="@+id/listview_long_checked_delete_demo_button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@+id/listview_long_checked_delete_demo_button3"
android:text="@string/listview_long_checked_delete_demo_button2" />
<Button
android:id="@+id/listview_long_checked_delete_demo_button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="22dp"
android:text="@string/listview_long_checked_delete_demo_button1" />
<Button
android:id="@+id/listview_long_checked_delete_demo_button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="22dp"
android:layout_toRightOf="@+id/listview_long_checked_delete_demo_button1"
android:text="@string/listview_long_checked_delete_demo_button4" />
</RelativeLayout>
</RelativeLayout>
Listview的item的布局如下:
listview_long_checked_delete_demo_item:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/listview_long_checked_delete_demo_item_textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="66dp"
android:layout_marginTop="14dp"
android:textSize="20sp" />
<CheckBox
android:id="@+id/listview_long_checked_delete_demo_item_checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/listview_long_checked_delete_demo_item_textView1"
android:layout_alignParentRight="true"
android:layout_marginRight="26dp"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:visibility="invisible" />
</RelativeLayout>
主活动代码如下:
public class ListViewActivity extends Activity implements OnItemClickListener, OnItemLongClickListener,
OnClickListener {
private String TAG = "ListViewActivity";
private LayoutInflater inflater;
private ListviewLongCheckedDdeleteDemoAda mListviewLongCheckedDdeleteDemoAda;
private Dialog alertDialog;
private List<String> mListviewLongCheckedDdeleteDemoList;
private RelativeLayout listview_long_checked_delete_demo_relativelayout1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.listview_long_checked_delete_demo);
initData();
initUI();
}
/*
* 初始化数据
*/
private void initData() {
inflater = getLayoutInflater();
}
/*
* 初始化UI
*/
private void initUI() {
Button listview_long_checked_delete_demo_button1 = (Button) findViewById(R.id.listview_long_checked_delete_demo_button1);
Button listview_long_checked_delete_demo_button2 = (Button) findViewById(R.id.listview_long_checked_delete_demo_button2);
Button listview_long_checked_delete_demo_button3 = (Button) findViewById(R.id.listview_long_checked_delete_demo_button3);
Button listview_long_checked_delete_demo_button4 = (Button) findViewById(R.id.listview_long_checked_delete_demo_button4);
listview_long_checked_delete_demo_relativelayout1 = (RelativeLayout) findViewById(R.id.listview_long_checked_delete_demo_relativelayout1);
listview_long_checked_delete_demo_button1.setOnClickListener(this);
listview_long_checked_delete_demo_button2.setOnClickListener(this);
listview_long_checked_delete_demo_button3.setOnClickListener(this);
listview_long_checked_delete_demo_button4.setOnClickListener(this);
ListView listview_long_checked_delete_demo_listView1 = (ListView) findViewById(R.id.listview_long_checked_delete_demo_listView1);
mListviewLongCheckedDdeleteDemoList = Data.getList();
mListviewLongCheckedDdeleteDemoAda = new ListviewLongCheckedDdeleteDemoAda(
inflater, mListviewLongCheckedDdeleteDemoList);
listview_long_checked_delete_demo_listView1
.setAdapter(mListviewLongCheckedDdeleteDemoAda);
listview_long_checked_delete_demo_listView1
.setOnItemClickListener(this);
listview_long_checked_delete_demo_listView1
.setOnItemLongClickListener(this);
}
//按钮点击事件
@Override
public void onClick(View arg0) {
int id = arg0.getId();
switch (id) {
case R.id.listview_long_checked_delete_demo_button1:
for (int i = 0; i < Data.getList().size(); i++) {
mListviewLongCheckedDdeleteDemoAda.getIsSelectedMap().put(i,
true);
}
mListviewLongCheckedDdeleteDemoAda.notifyDataSetChanged();
break;
case R.id.listview_long_checked_delete_demo_button2:
for (int i = 0; i < Data.getList().size(); i++) {
if (mListviewLongCheckedDdeleteDemoAda.getIsSelectedMap()
.get(i)) {
mListviewLongCheckedDdeleteDemoAda.getIsSelectedMap().put(
i, false);
} else {
mListviewLongCheckedDdeleteDemoAda.getIsSelectedMap().put(
i, true);
}
}
mListviewLongCheckedDdeleteDemoAda.notifyDataSetChanged();
break;
case R.id.listview_long_checked_delete_demo_button3:
listview_long_checked_delete_demo_relativelayout1
.setVisibility(View.GONE);
for (int i = 0; i < Data.getList().size(); i++) {
mListviewLongCheckedDdeleteDemoAda.getIsSelectedMap().put(i,
false);
ListviewLongCheckedDdeleteDemoAda.getIsvisibleMap().put(i,
CheckBox.INVISIBLE);
}
mListviewLongCheckedDdeleteDemoAda.notifyDataSetChanged();
break;
case R.id.listview_long_checked_delete_demo_button4:
alertDialog = new AlertDialog.Builder(this)
.setTitle("确定删除?")
.setMessage("您确定删除所选信息?")
.setIcon(R.drawable.lianxiren)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
int len = Data.getList().size();
for (int i = len - 1; i >= 0; i--) {
Boolean value = mListviewLongCheckedDdeleteDemoAda
.getIsSelectedMap().get(i);
if (value) {
mListviewLongCheckedDdeleteDemoList
.remove(i);
mListviewLongCheckedDdeleteDemoAda
.getIsSelectedMap().put(i,
false);
}
}
mListviewLongCheckedDdeleteDemoAda
.notifyDataSetChanged();
alertDialog.cancel();
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
alertDialog.cancel();
}
}).create();
alertDialog.show();
break;
default:
break;
}
}
//ListView的点击事件
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
ListView listView = (ListView) arg0;
int id = listView.getId();
switch (id) {
case R.id.listview_long_checked_delete_demo_listView1:
ViewHolder holder = (ViewHolder) arg1.getTag();
// 改变CheckBox的状态
holder.checkBox.toggle();
ListviewLongCheckedDdeleteDemoAda.getIsSelectedMap()
.put(arg2, true);
break;
default:
break;
}
}
//ListView的长按事件
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
ListView listView = (ListView) arg0;
int id = listView.getId();
switch (id) {
case R.id.listview_long_checked_delete_demo_listView1:
listview_long_checked_delete_demo_relativelayout1
.setVisibility(View.VISIBLE);
for (int i = 0; i < Data.getList().size(); i++) {
ListviewLongCheckedDdeleteDemoAda.getIsvisibleMap().put(i,
CheckBox.VISIBLE);
}
mListviewLongCheckedDdeleteDemoAda.notifyDataSetChanged();
break;
default:
break;
}
return false;
}
}
适配器的代码如下:
package com.example.fuapidemo.ada;
import java.util.HashMap;
import java.util.List;
import com.example.fuapidemo.R;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
/**
* ListView长按删除适配器
*
* @author FYJ
*
*/
public class ListviewLongCheckedDdeleteDemoAda extends BaseAdapter {
private List<String> list;
private LayoutInflater inflater;
private ViewHolder viewHolder;
private static HashMap<Integer, Boolean> isSelectedMap;// 用来控制CheckBox的选中状况
private static HashMap<Integer, Integer> isvisibleMap;// 用来控制CheckBox的显示状况
public ListviewLongCheckedDdeleteDemoAda(LayoutInflater inflater,
List<String> list) {
this.list = list;
this.inflater = inflater;
isSelectedMap = new HashMap<Integer, Boolean>();
isvisibleMap = new HashMap<Integer, Integer>();
initDate();
}
@Override
public int getCount() {
int number = 0;
if (list != null) {
number = list.size();
}
return number;
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
// 初始化isSelectedMap的数据
private void initDate() {
for (int i = 0; i < list.size(); i++) {
getIsSelectedMap().put(i, false);
getIsvisibleMap().put(i, CheckBox.INVISIBLE);
}
}
public final class ViewHolder {
public TextView textView1;
public CheckBox checkBox;
}
public static HashMap<Integer, Boolean> getIsSelectedMap() {
return isSelectedMap;
}
public static HashMap<Integer, Integer> getIsvisibleMap() {
return isvisibleMap;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
if (arg1 == null) {
arg1 = inflater.inflate(
R.layout.listview_long_checked_delete_demo_item, null);
viewHolder = new ViewHolder();
viewHolder.textView1 = (TextView) arg1
.findViewById(R.id.listview_long_checked_delete_demo_item_textView1);
viewHolder.checkBox = (CheckBox) arg1
.findViewById(R.id.listview_long_checked_delete_demo_item_checkBox1);
arg1.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) arg1.getTag();
viewHolder.checkBox.setChecked(getIsSelectedMap().get(arg0));
viewHolder.checkBox.setVisibility(getIsvisibleMap().get(arg0));
}
viewHolder.textView1.setText(list.get(arg0));
return arg1;
}
}
//数据类的代码:
public class Data {
public static List<String> getList() {
List<String> list = new ArrayList<String>();
list.add("篮球");
list.add("排球");
list.add("网球");
list.add("乒乓球");
list.add("足球");
list.add("橄榄球");
list.add("羽毛球");
list.add("桌球");
list.add("保龄球");
list.add("曲棍球");
return list;
}
}