zoukankan      html  css  js  c++  java
  • listview中的checkbox实现全选、反选、删除的功能

    1、布局实现的效果

    2、找到该布局文件下的所在的activity,实现的效果

    package com.bwie.checkbox_all;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    import com.bwie.adapter.MyAdapter;
    import com.bwie.vo.User;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class MainActivity extends Activity implements OnClickListener {
    
        private Button all;
        private Button delete;
        private Button reverse;
        private TextView sum_price;
        private ListView lv;
        private String[] name = new String[] { "宋静萌", "范丽清", "杨洋", "郑芳蓓", "张丹",
                "刘孟琦", "张聪聪", "任殊慧", "刘黎伟", "巢乐乐", "廉洪波", "朱帅", "李海洋", "黄校丹", "王涛",
                "李豆" };
        private float[] price = new float[] { 100, 100, 100, 100, 100, 100, 100,
                100, 100, 100, 100, 100, 100, 100, 100, 100 };
        private User user;
        private ArrayList<User> list_user;
        private MyAdapter adapter;
        float sum=0;(价格的总价)
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // 初始化数据(找控件)
            init();
    
            // 为lv设置数据
            setDataForLv();
            
         
    
            // 为按钮设置点击监听事件
            all.setOnClickListener(this);
            delete.setOnClickListener(this);
            reverse.setOnClickListener(this);
    
        }
    
        private void setDataForLv() {
    
            // 创建集合对象
            list_user = new ArrayList<User>();
    
            for (int i = 0; i < name.length; i++) {
                user = new User(name[i], price[i], false);
                // 将对象添加到集合中
                list_user.add(user);
            }
    
            // 为listview设置适配器
            adapter = new MyAdapter(MainActivity.this, list_user,sum_price);
            lv.setAdapter(adapter);
    
        }
    
        private void init() {
            // TODO Auto-generated method stub
    
            // 找控件
            all = (Button) findViewById(R.id.all);
            delete = (Button) findViewById(R.id.delete);
            reverse = (Button) findViewById(R.id.reverse);
            sum_price = (TextView) findViewById(R.id.sum_price);
            lv = (ListView) findViewById(R.id.lv);
    
        }
    
        @Override
        public void onClick(View v) {
    
            switch (v.getId()) {
            case R.id.all://全选按钮(将对象中的boolean赋值为true)
                sum=0;//每次点击是都现将总价赋值为0,否则会出现累加的效果
    
                // 将复选框设置为true
                for (int i = 0; i < list_user.size(); i++) {
                    
                    list_user.get(i).setIscheck(true);
                    //计算总价
                    sum += list_user.get(i).getPrice();
                    
                }
    
                //为总价textview赋值
                sum_price.setText(sum+"");
                // 重新刷新适配器(实现页面重新展示执行后展示最后的界面
                adapter.notifyDataSetChanged();
                 
                break;
    
            case R.id.delete:
                //迭代遍历集合对象
                Iterator<User> iterator = list_user.iterator();
                while(iterator.hasNext())
                {
                    
                    User next = iterator.next();//获取每次迭代的对象
                    boolean ischeck = next.isIscheck();//遍历选中的状态,若是选中的状态,就将选中的 条目删除
                    
                    if(ischeck)
                    {
                        iterator.remove();
                    }
                }
    
                adapter.notifyDataSetChanged();
    
                break;
            case R.id.reverse:
                
             
                //反选
                for(int i = 0; i < list_user.size(); i++)
                {
                    //判断复选框的选中状态
                    boolean ischeck = list_user.get(i).isIscheck();
                    if(ischeck)
                    {
                        //为选中的状态就使其为未选中的状态
                        list_user.get(i).setIscheck(false);
                        //计算总价
                        sum -= list_user.get(i).getPrice();
                        
                    }else{
    
                        //为未选中的状态就使其为选中的状态
                        list_user.get(i).setIscheck(true);
                        
                        sum += list_user.get(i).getPrice();
                    }
                }
                
                sum_price.setText(sum+"");
                adapter.notifyDataSetChanged();
    
                break;
            }
    
        }
    
    }
    3、对应的适配器的代码
    package com.bwie.adapter;

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

    import com.bwie.checkbox_all.R;
    import com.bwie.vo.User;

    import android.content.Context;
    import android.content.SharedPreferences;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.CompoundButton.OnCheckedChangeListener;
    import android.widget.TextView;

    public class MyAdapter extends BaseAdapter {

        private Context context;
        private ViewHolder holder;
        private List<User> list;
        private float sum;
        private TextView sum_price;
        private SharedPreferences share;

        public MyAdapter(Context context, List<User> list, TextView sum_price) {
            this.context = context;
            this.list = list;
            this.sum_price = sum_price;

        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                // 填充新布局
                convertView = View.inflate(context, R.layout.item_layout, null);

                holder = new ViewHolder();

                // 找控件
                holder.name = (TextView) convertView.findViewById(R.id.name_item);
                holder.price = (TextView) convertView.findViewById(R.id.price_item);
                holder.box = (CheckBox) convertView.findViewById(R.id.checkbox);

                // 进行绑定
                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            // 为找到的控件赋值
            holder.name.setText(list.get(position).getName());
            holder.price.setText(list.get(position).getPrice() + "");

            // 滑动时,checkbox状态改变了(convertView复用导致的),就调用这个方法
            holder.box.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {

                    list.get(position).setIscheck(isChecked);

                    sum = 0;
                    for (int i = 0; i < list.size(); i++) {
                        boolean ischeck = list.get(i).isIscheck();
                        if (ischeck) {
                            float price = list.get(i).getPrice();
                            sum += price;
                        }
                    }

                    sum_price.setText(sum + "");

                }
            });

        //为复选框赋值必须写在状态变换监听事件的后面(避免错乱)
            holder.box.setChecked(list.get(position).isIscheck());

            return convertView;
        }

        class ViewHolder {

            TextView name;
            TextView price;
            CheckBox box;

        }

    }

    
    

    4、JavaBean类

    package com.bwie.vo;
    
    public class User {
        
        private String name;
        private float price;
        private boolean ischeck;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public float getPrice() {
            return price;
        }
        public void setPrice(float price) {
            this.price = price;
        }
        public boolean isIscheck() {
            return ischeck;
        }
        public void setIscheck(boolean ischeck) {
            this.ischeck = ischeck;
        }
        @Override
        public String toString() {
            return "User [name=" + name + ", price=" + price + ", ischeck="
                    + ischeck + "]";
        }
        public User(String name, float price, boolean ischeck) {
            super();
            this.name = name;
            this.price = price;
            this.ischeck = ischeck;
        }
        public User() {
            super();
        }
        
        
    
    }
     
  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/8023-itxinde/p/5401279.html
Copyright © 2011-2022 走看看