ListView 复选checkbox

来源:互联网 发布:搜索软件 编辑:程序博客网 时间:2024/05/29 08:50

//布局

<ScrollView    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/scrollview"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.bawei.listview.MainActivity">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="horizontal">            <Button                android:id="@+id/btn_all"                android:layout_width="0dp"                android:layout_weight="1"                android:layout_height="wrap_content"                android:onClick="onClick"                android:text="全选"/>            <Button                android:id="@+id/btn_hide"                android:layout_width="0dp"                android:layout_weight="1"                android:layout_height="wrap_content"                android:onClick="onClick"                android:text="隐藏已选"/>            <Button                android:id="@+id/btn_no"                android:layout_width="0dp"                android:layout_weight="1"                android:layout_height="wrap_content"                android:onClick="onClick"                android:text="全不选"/>        </LinearLayout>        <com.bawei.listview.ScrollListView            android:id="@+id/lv"            android:layout_width="match_parent"            android:layout_height="match_parent">        </com.bawei.listview.ScrollListView>    </LinearLayout></ScrollView>

//创建bean包
`class Data{
public int index;

public String text;public boolean isCheck;

}`

//MainActivity

private ListView lv;    private MyAdapter adapter;    private List<Data> list;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initData();        initView();    }    private void initData() {        list = new ArrayList<>();        for(int i=0;i<50;i++){            Data data = new Data();            data.index = i;            data.text = "item " +i;            list.add(data);        }    }    private boolean isHide = false;    private void initView() {        lv = (ListView) findViewById(R.id.lv);        adapter = new MyAdapter(list,this,false);        lv.setAdapter(adapter);    }    @Override    public void onClick(View v) {        if(v.getId()==R.id.btn_all){            check(true);        }else if(v.getId()==R.id.btn_no){            check(false);        }else if(v.getId()==R.id.btn_hide){            isHide = isHide==true?false:true;            hide(isHide);        }    }    private void hide(boolean isHide) {        Button btn = (Button)findViewById(R.id.btn_hide);        if(isHide)            btn.setText("取消隐藏");        else            btn.setText("隐藏已选");        adapter.setHide(isHide);        adapter.notifyDataSetChanged();    }    private void check(boolean flag) {        for (Data data: list)            data.isCheck = flag;        adapter.notifyDataSetChanged();    }}

//adapter

package com.bawei.listview;import android.content.Context;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * Created by yekh on 2016/11/1. */public class MyAdapter extends BaseAdapter {    private List<Data> list = new ArrayList<>();//当前展示的数据    private List<Data> listAll;//全部数据 备注  保持更MainActivity的数据一致    private Context mContext;    private boolean isHide;    public MyAdapter(List<Data> list, Context context,boolean isHide) {        listAll = list;        this.list.addAll(listAll);        mContext = context;        this.isHide = isHide;    }    public void setHide(boolean isHide){        this.isHide = isHide;    }    public void check() {        list.clear();        list.addAll(listAll);        if(isHide){            List<Data> listDel = new ArrayList<>();//            for(Data data:list){//取出已选的数据//                if(data.isCheck)//                    listDel.add(data);//            }            for(int i=0;i<list.size();i++){//取出已选的数据 存储在listDel                Data data = list.get(i);                if(data.isCheck)                    listDel.add(data);            }            for(Data data:listDel)//删除全部已选的数据 list                list.remove(data);        }        super.notifyDataSetChanged();    }    @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(final int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if(convertView==null){            convertView = View.inflate(mContext,R.layout.lv_item,null);            holder =new ViewHolder();            holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);            holder.content = (TextView) convertView.findViewById(R.id.content);            holder.create = (TextView) convertView.findViewById(R.id.create);            holder.index = (TextView) convertView.findViewById(R.id.index);            holder.create.setText(position+"");            convertView.setTag(holder);        }else {            holder = (ViewHolder)convertView.getTag();        }        Data data = list.get(position);        holder.content.setText(data.text);        holder.index.setText(data.index+"");        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                Log.e("check","check--->"+position+"/"+isChecked);                list.get(position).isCheck = isChecked;//listAll当中对应对象的数据同时改变                check();            }        });        //holder.checkBox.setOnCheckedChangeListener(null);        holder.checkBox.setChecked(data.isCheck);        return convertView;    }    class ViewHolder {        CheckBox checkBox;        TextView content;        TextView create;        TextView index;    }

//创建scorrowview

public class ScrollListView extends ListView{    public ScrollListView(Context context) {        super(context);    }    public ScrollListView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public ScrollListView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                MeasureSpec.AT_MOST);        MeasureSpec.get        super.onMeasure(widthMeasureSpec, expandSpec);    }}
0 0