安卓ListView条目删除-全选,反选,复位,取消,


这是一个在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>




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值