• 安卓实现全选 反选 取消选


    MainActivity

    package com.ce.checkbox;

    import java.util.ArrayList;

    import com.ce.adapter.MyAdapter;
    import com.ce.adapter.MyAdapter.ViewHolder;

    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TextView;

    public class MainActivity extends Activity {
        private ListView lv;
        private MyAdapter mAdapter;
        private ArrayList<String> list;
        private Button bt_selectall;
        private Button bt_cancel;
        private Button bt_deselectall;
        private int checkNum; // 记录选中的条目数量
        private TextView tv_show;// 用于显示选中的条目数量

        /** Called when the activity is first created. */

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            /* 实例化各个控件 */
            lv = (ListView) findViewById(R.id.lv);
            bt_selectall = (Button) findViewById(R.id.bt_selectall);
            bt_cancel = (Button) findViewById(R.id.bt_cancleselectall);
            bt_deselectall = (Button) findViewById(R.id.bt_deselectall);
            tv_show = (TextView) findViewById(R.id.tv);
            list = new ArrayList<String>();
            // 为Adapter准备数据
            initDate();
            // 实例化自定义的MyAdapter
            mAdapter = new MyAdapter(list, this);
            // 绑定Adapter
            lv.setAdapter(mAdapter);

            // 全选按钮的回调接口
            bt_selectall.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 遍历list的长度,将MyAdapter中的map值全部设为true
                    for (int i = 0; i < list.size(); i++) {
                        MyAdapter.getIsSelected().put(i, true);
                    }
                    // 数量设为list的长度
                    checkNum = list.size();
                    // 刷新listview和TextView的显示
                    dataChanged();
                }
            });

            // 反选按钮的回调接口
            bt_cancel.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 遍历list的长度,将已选的设为未选,未选的设为已选
                    for (int i = 0; i < list.size(); i++) {
                        if (MyAdapter.getIsSelected().get(i)) {
                            MyAdapter.getIsSelected().put(i, false);
                            checkNum--;
                        } else {
                            MyAdapter.getIsSelected().put(i, true);
                            checkNum++;
                        }
                    }
                    // 刷新listview和TextView的显示
                    dataChanged();
                }
            });

            // 取消按钮的回调接口
            bt_deselectall.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 遍历list的长度,将已选的按钮设为未选
                    for (int i = 0; i < list.size(); i++) {
                        if (MyAdapter.getIsSelected().get(i)) {
                            MyAdapter.getIsSelected().put(i, false);
                            checkNum--;// 数量减1
                        }
                    }
                    // 刷新listview和TextView的显示
                    dataChanged();
                }
            });

            // 绑定listView的监听器
            lv.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
                    // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
                    ViewHolder holder = (ViewHolder) arg1.getTag();
                    // 改变CheckBox的状态
                    holder.cb.toggle();
                    // 将CheckBox的选中状况记录下来
                    MyAdapter.getIsSelected().put(arg2, holder.cb.isChecked());
                    // 调整选定条目
                    if (holder.cb.isChecked() == true) {
                        checkNum++;
                    } else {
                        checkNum--;
                    }
                    // 用TextView显示
                    tv_show.setText("已选中" + checkNum + "项");
                }
            });
        }

        // 初始化数据
        private void initDate() {
            for (int i = 0; i < 15; i++) {
                list.add("data" + " " + i);
            }
            ;
        }

        // 刷新listview和TextView的显示
        private void dataChanged() {
            // 通知listView刷新
            mAdapter.notifyDataSetChanged();
            // TextView显示最新的选中数目
            tv_show.setText("已选中" + checkNum + "项");
        };
    }

    //Adapter

    package com.ce.adapter;

    import java.util.ArrayList;
    import java.util.HashMap;

    import com.ce.checkbox.R;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.CheckBox;
    import android.widget.TextView;

    public class MyAdapter extends BaseAdapter {
        // 填充数据的list
        private ArrayList<String> list;
        // 用来控制CheckBox的选中状况
        private static HashMap<Integer, Boolean> isSelected;
        // 上下文
        private Context context;
        // 用来导入布局
        private LayoutInflater inflater = null;

        // 构造器
        public MyAdapter(ArrayList<String> list, Context context) {
            this.context = context;
            this.list = list;
            inflater = LayoutInflater.from(context);
            isSelected = new HashMap<Integer, Boolean>();
            // 初始化数据
            initDate();
        }

        // 初始化isSelected的数据
        private void initDate() {
            for (int i = 0; i < list.size(); i++) {
                getIsSelected().put(i, false);
            }
        }

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                // 获得ViewHolder对象
                holder = new ViewHolder();
                // 导入布局并赋值给convertview
                convertView = inflater.inflate(R.layout.item, null);
                holder.tv = (TextView) convertView.findViewById(R.id.item_tv);
                holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);
                // 为view设置标签
                convertView.setTag(holder);
            } else {
                // 取出holder
                holder = (ViewHolder) convertView.getTag();
            }
            // 设置list中TextView的显示
            holder.tv.setText(list.get(position));
            // 根据isSelected来设置checkbox的选中状况
            holder.cb.setChecked(getIsSelected().get(position));
            return convertView;
        }

        public static HashMap<Integer, Boolean> getIsSelected() {
            return isSelected;
        }

        public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {
            MyAdapter.isSelected = isSelected;
        }

        public static class ViewHolder {
            public TextView tv;
            public CheckBox cb;
        }
    }

    //main.xml

    <?xml version="1.0" encoding="utf-8"?>  
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:orientation="horizontal" >  
     
        <TextView  
            android:id="@+id/tv"  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:layout_gravity="center_vertical" />  
     
        <LinearLayout  
            android:id="@+id/line"  
            android:layout_width="fill_parent"  
            android:layout_height="50dp"  
            android:layout_below="@+id/tv"  
            android:orientation="horizontal" >  
     
            <Button  
                android:id="@+id/bt_selectall"  
                android:layout_width="80dp"  
                android:layout_height="fill_parent"  
                android:text="全选" />  
     
                 <Button  
                android:id="@+id/bt_cancleselectall"  
                android:layout_width="80dp"  
                android:layout_height="fill_parent"  
                android:text="反选" />  
                   
              
            <Button  
                android:id="@+id/bt_deselectall"  
                android:layout_width="80dp"  
                android:layout_height="fill_parent"  
                android:text="取消选择" />  
     
        </LinearLayout>  
     
        <ListView  
            android:id="@+id/lv"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            android:layout_below="@+id/line" />  
     
    </RelativeLayout>

    //item.xml

    <?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:orientation="horizontal" >

        <TextView
            android:id="@+id/item_tv"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1" />

        <CheckBox
            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>

  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/weiyangge/p/5383891.html
Copyright © 2020-2023  润新知