全选和反选

来源:互联网 发布:ubuntu lamp环境 编辑:程序博客网 时间:2024/05/22 15:53

今天给大家分享一个安卓的全选反选,全选和反选用到的地方也很多。实现全选和反选有两个类两个布局。接下来给大家分享一下


第一个Activity类

package com.example.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private ListView lv;    private Button bt_selectall;    private Button bt_cancel;    private MyAdapter mAdapter;    private int checkNum;    private Button bt_deselectall;    private TextView tv_show;    private List<String> list;    @Override    protected 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_canclesectall);        bt_deselectall= (Button) findViewById(R.id.bt_deselectall);        tv_show = (TextView) findViewById(R.id.tv);        list=new ArrayList<>();        //模拟数据        initData();        //实例化MyAdapter        mAdapter=new MyAdapter((ArrayList<String>) list,this);        //绑定        lv.setAdapter(mAdapter);        //全选按钮回调接口        bt_selectall.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                for (int i = 0; i <list.size() ; i++) {                    MyAdapter.getIsSelected().put(i,true);                }                checkNum=list.size();                dataChanged();            }        });        //反选接口回调        bt_cancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                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++;                    }                }                dataChanged();            }        });        //取消按钮        bt_deselectall.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                for (int i = 0; i < list.size(); i++) {                    if (MyAdapter.getIsSelected().get(i)){                        MyAdapter.getIsSelected().put(i,false);                        checkNum--;                    }                }                dataChanged();            }        });        // 绑定listView的监听器        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                                    long arg3) {                // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤                MyAdapter.ViewHolder holder = (MyAdapter.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 initData() {        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.example.myapplication;import java.util.ArrayList;import java.util.HashMap;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.listviewitem, 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 {        TextView tv;        CheckBox cb;    }}
下面这个是Activity类布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.myapplication.MainActivity">    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:gravity="center_vertical"        />    <LinearLayout        android:layout_below="@+id/tv"        android:id="@+id/line"        android:layout_width="wrap_content"        android:layout_height="50dp"        android:orientation="horizontal">        <Button            android:id="@+id/bt_selectall"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="全选"/>        <Button            android:id="@+id/bt_canclesectall"            android:layout_width="80dp"            android:layout_height="wrap_content"            android:text="反选"/>        <Button            android:id="@+id/bt_deselectall"            android:layout_width="80dp"            android:layout_height="wrap_content"            android:text="取消选择"/>    </LinearLayout>        <ListView            android:id="@+id/lv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_below="@+id/line"></ListView></RelativeLayout>

这个就是最后的item布局
<?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>

原创粉丝点击