CheckBox简单实现删除

翻译 2018年04月16日 07:59:06

给大家详细介绍下用CheckBox实现删除,编辑,取消功能

原创请参考https://blog.csdn.net/lovelyliang/article/details/49080235

首先先看布局 也就是你的activity_ain.xml里面的布局

<ListView
    android:id="@+id/listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
</ListView>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_alignParentBottom="true" >
    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="编辑"
        android:onClick="click_editButton"
        />
    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="删除"
        android:onClick="click_deleteButton"
        />
    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="取消"
        android:onClick="click_cancelButton"
        />
</LinearLayout>
这一步就是你的ManAcivity的代码

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ListView listview;
    private MyAdapter myAdapter;
    /**列表的数据源*/
    private List<String> listData;
    /**记录选中item的下标*/
    private List<Integer> checkedIndexList;
    /**保存每个item中的checkbox*/
    private List<CheckBox> checkBoxList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initListData();
        initView();
    }
    public void initListData() {
        //静态赋值
        listData = new ArrayList<String>();
        for(int i=0;i<6;i++){
            listData.add("item" + i);
        }
    }
    public void initView(){
        listview = (ListView) findViewById(R.id.listview);
        myAdapter = new MyAdapter(getApplicationContext(), listData);
        listview.setAdapter(myAdapter);
        //监听listview的长按事件
        listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                           int arg2, long arg3) {
                //将checkbox设置为可见
                for(int i=0;i<checkBoxList.size();i++){
                    checkBoxList.get(i).setVisibility(View.VISIBLE);
                }
                return false;
            }
        });

        checkedIndexList = new ArrayList<Integer>();
        checkBoxList = new ArrayList<CheckBox>();
    }
    class MyAdapter extends BaseAdapter {
        private List<String> listData;
        private LayoutInflater inflater;
        public MyAdapter(Context context, List<String> listData){
            this.listData = listData;
            inflater = LayoutInflater.from(context);
        }
        @Override
        public int getCount() {
            return listData.size();
        }
        @Override
        public Object getItem(int arg0) {
            return listData.get(arg0);
        }
        @Override
        public long getItemId(int arg0) {
            return arg0;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            if(convertView == null){
                viewHolder = new ViewHolder();
                convertView = inflater.inflate(R.layout.list_item, null);
                viewHolder.tv = (TextView) convertView.findViewById(R.id.textview);
                viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox);
                //将item中的checkbox放到checkBoxList中
                checkBoxList.add(viewHolder.checkbox);
                convertView.setTag(viewHolder);
            }else{
                viewHolder = (ViewHolder) convertView.getTag();
            }
            viewHolder.tv.setText(listData.get(position));
            viewHolder.checkbox.setOnCheckedChangeListener(new CheckBoxListener(position));
            return convertView;
        }
        class ViewHolder{
            TextView tv;
            CheckBox checkbox;
        }
    }
    /**checkbox的监听器*/
    class CheckBoxListener implements RadioGroup.OnCheckedChangeListener, CompoundButton.OnCheckedChangeListener {
        /**列表item的下标位置*/
        int position;
        public CheckBoxListener(int position){
            this.position = position;
        }

        @Override
        public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {

        }

        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if(b){
                checkedIndexList.add(position);
            }else{
                checkedIndexList.remove((Integer)position);
            }
        }
    }
    /**编辑按钮的点击事件*/
    public void click_editButton(View v){
        //将checkbox设置为可见
        for(int i=0;i<checkBoxList.size();i++){
            checkBoxList.get(i).setVisibility(View.VISIBLE);
        }
    }
    /**删除按钮的点击事件*/
    public void click_deleteButton(View v){
        //先将checkedIndexList中的元素从大到小排列,否则可能会出现错位删除或下标溢出的错误
        checkedIndexList = sortCheckedIndexList(checkedIndexList);
        for(int i=0;i<checkedIndexList.size();i++){
            //需要强转为int,才会删除对应下标的数据,否则默认删除与括号中对象相同的数据
            listData.remove((int)checkedIndexList.get(i));
            checkBoxList.remove(checkedIndexList.get(i));
        }
        for(int i=0;i<checkBoxList.size();i++){
            //将已选的设置成未选状态
            checkBoxList.get(i).setChecked(false);
            //将checkbox设置为不可见
            checkBoxList.get(i).setVisibility(View.INVISIBLE);
        }
        //更新数据源
        myAdapter.notifyDataSetChanged();
        //清空checkedIndexList,避免影响下一次删除
        checkedIndexList.clear();
    }
    /**取消按钮的点击事件*/
    public void click_cancelButton(View v){
        for(int i=0;i<checkBoxList.size();i++){
            //将已选的设置成未选状态
            checkBoxList.get(i).setChecked(false);
            //将checkbox设置为不可见
            checkBoxList.get(i).setVisibility(View.INVISIBLE);
        }
    }
    /**对checkedIndexList中的数据进行从大到小排序*/
    public List<Integer> sortCheckedIndexList(List<Integer> list){
        int[] ass = new int[list.size()];//辅助数组
        for(int i=0;i<list.size();i++){
            ass[i] = list.get(i);
        }
        Arrays.sort(ass);
        list.clear();
        for(int i=ass.length-1;i>=0;i--){
            list.add(ass[i]);
        }
        return list;
    }

}

这里边适配器写在了Manactivity为了CheckBox的实现删除的功能上面都有注释
自己好好看看。

最后适配器list_item的布局文件

<CheckBox
    android:id="@+id/checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:visibility="invisible" />

<TextView
    android:id="@+id/textview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textColor="#000000"
    android:layout_centerVertical="true"
    />
结束。

VC++/MFC 教程6&7(英文)

Lesson 6: SDI and MDI ApplicationsWe are getting to some advanced stuff now. In this lesson I am not...
  • jingqiu
  • jingqiu
  • 2001-06-04 11:36:00
  • 863

Android ListView长按弹出CheckBox,实现全选,反选,批量删除等功能

  • 2016年08月03日 17:53
  • 20.19MB
  • 下载

android完美解决ListView中CheckBox的全选、反选、批量删除的问题

效果图 前几天看到有朋友发帖问关于ListView的多选、反选、取消等问题,我自己想了一下,最好的解决方法应该是生成一个list来维系checkbox组的选择状态。利用listview的getChi...
  • selfreeyuan
  • selfreeyuan
  • 2016-02-24 12:04:16
  • 6300

自定义带CheckBox的ListView

  • 2012年05月05日 06:43
  • 43KB
  • 下载

asp.net中使用Repeater嵌套,提交选中的checkbox项。

主要代码,已测试通过。 前台: ' /> ' runat="server" /> 后台: protected void Page...
  • ekinchen3
  • ekinchen3
  • 2012-07-12 11:36:31
  • 2467

如何用JS删除checkbox选中的记录

/** 选取选中的复选框的值 */ function checkbox_selected() {  var chkvalue = "";  var chk = window.document.g...
  • gfangxiong
  • gfangxiong
  • 2012-03-13 16:52:39
  • 11779

android中CheckBox加载自定义选中与未选中图片样式

  • 2013年09月25日 14:18
  • 1.26MB
  • 下载

checkbox批量删除功能

今天来实现一个批量删除的功能:批量删除的功能呢,首先前台页面可以想到使用checkbox来做,这里后台数据库其实有两种删除的方式,如下:但是不管数据库以哪种形式的sql删除,想要批量删除,那么前台传到...
  • lwh_zfj
  • lwh_zfj
  • 2017-05-29 09:51:18
  • 3239

ListView+CheckBox,实现批量删除与解决listview滚动checkBox选择状态絮乱

这个项目是Android studio的,eclipse的朋友可以复制一下资源就能用了。 知识点如下: 1、解决listView滚动时checkBox的选择状态会发生变化(絮乱); 2、ListVie...
  • u011070603
  • u011070603
  • 2015-11-12 15:58:43
  • 2161

easyui datagrid删除指定行checkbox 和禁用

singleSelect: false,   selectOnCheck: true,   checkOnSelect: false,   onLoadSuccess: function(dat...
  • liyongqiao
  • liyongqiao
  • 2016-09-21 17:47:15
  • 3359
收藏助手
不良信息举报
您举报文章:CheckBox简单实现删除
举报原因:
原因补充:

(最多只允许输入30个字)