列表多选配合取消和确定以及全选使用

来源:互联网 发布:里仁洞淘宝广告摄影 编辑:程序博客网 时间:2024/04/28 14:57

效果

代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/rl_spinner_up"    android:layout_width="match_parent"    android:layout_height="50dp"    android:background="@color/colorWhite">    <TextView        android:id="@+id/tv_spinner_multi"        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:layout_centerHorizontal="true"        android:gravity="center"        android:text=""        android:textAllCaps="false"        android:textColor="@color/colorTv" />    <CheckBox        android:id="@+id/cb_spinner_multi"        android:layout_width="13dp"        android:layout_height="9dp"        android:layout_centerVertical="true"        android:layout_marginLeft="8dp"        android:layout_toRightOf="@id/tv_spinner_multi"        android:background="@drawable/selector_item_type"        android:button="@null"        android:checked="true"        android:clickable="false"        android:focusable="false"        android:gravity="center" /></RelativeLayout>
public class MyAdapter extends BaseAdapter {    private Context mContext;    private List<String> mList;    //用来控制CheckBox的选中状况    private static HashMap<Integer, Boolean> isSelected;    public MyAdapter(Context context, List<String> list, HashMap<Integer, Boolean> isSelected) {        this.mList = list;        this.mContext = context;        this.isSelected = isSelected;        initData();    }    //初始化isSelected的数据    private void initData() {        for (int i = 0; i < mList.size(); i++) {            getIsSelected().put(i, false);        }    }    private void initDataTrue() {        for (int i = 0; i < mList.size(); i++) {            getIsSelected().put(i, true);        }    }    public void updata(HashMap<Integer, Boolean> isSelectedTrue) {        for (int i = 0; i < isSelectedTrue.size(); i++) {            this.isSelected.put(i, isSelectedTrue.get(i));        }        notifyDataSetChanged();    }    @Override    public int getCount() {        return mList.size();    }    @Override    public Object getItem(int position) {        return mList.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        ViewHolder holder;        String bean = mList.get(position);        LayoutInflater inflater = LayoutInflater.from(mContext);        if (convertView == null) {            convertView = inflater.inflate(R.layout.item_layout, parent, false);            holder = new ViewHolder();            holder.tv_spinner_multi = convertView.findViewById(R.id.tv_spinner_multi);            holder.cb_spinner_multi = convertView.findViewById(R.id.cb_spinner_multi);            holder.rl_spinner_up = convertView.findViewById(R.id.rl_spinner_up);            convertView.setTag(holder);        } else {            holder = (ViewHolder) convertView.getTag();        }        holder.tv_spinner_multi.setText(bean);        //监听checkBox并根据原来的状态来设置新的状态        holder.rl_spinner_up.setOnClickListener(new View.OnClickListener() {            public void onClick(View v) {                if (isSelected.get(position)) {                    if (position == 0) {                        initData();//如果是0位置,就将所有的都设置成不选中                    } else {                        isSelected.put(0, false);//有一个非0位置的不选中的时候,0位置的就不会被选中                        isSelected.put(position, false);                        setIsSelected(isSelected);                    }                } else {                    if (position == 0) {                        initDataTrue();//如果是0位置,就将所有的都设置成选中                    } else {                        //非0位置的时候,判断其他的子项是否已经选中                        int count = 0;                        for (int i = 0; i < getIsSelected().size(); i++) {                            if (i != 0 && i != position && getIsSelected().get(i)) {                                count++;                            }                        }                        if (count == mList.size() - 2) {                            isSelected.put(0, true);                        }                        isSelected.put(position, true);                        setIsSelected(isSelected);                    }                }                notifyDataSetChanged();            }        });        //根据选中情况设置字体颜色        if (isSelected.get(position)) {            holder.tv_spinner_multi.setTextColor(mContext.getResources().getColor(R.color.colorAccent));        } else {            holder.tv_spinner_multi.setTextColor(mContext.getResources().getColor(R.color.colorTv));        }        // 根据isSelected来设置checkbox的选中状况        holder.cb_spinner_multi.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;    }    private static class ViewHolder {        private TextView tv_spinner_multi;        private CheckBox cb_spinner_multi;        private RelativeLayout rl_spinner_up;    }}
private String area[] = {"全部", "北京", "上海", "广州", "深圳", "郑州", "南京"};private HashMap<Integer, Boolean> isSelectedArea = new HashMap<Integer, Boolean>();private HashMap<Integer, Boolean> isSelectedAreaTrue = new HashMap<Integer, Boolean>();listview = (ListView) findViewById(R.id.listview);myAdapter = new MyAdapter(this, Arrays.asList(area), isSelectedArea);listview.setAdapter(myAdapter);initData();//初始化isSelectedTrue的数据private void initData() {for (int i = 0; i < area.length; i++) {isSelectedAreaTrue.put(i, false);}}public void onClick(View view) {switch (view.getId()) {case R.id.tv_show:if (listview.getVisibility() == View.VISIBLE) {listview.setVisibility(View.GONE);} else {listview.setVisibility(View.VISIBLE);}break;case R.id.btn_spinner_cancel_area:listview.setVisibility(View.GONE);myAdapter.updata(isSelectedAreaTrue);break;case R.id.btn_spinner_ok_area:List<String> selectedListArea = new ArrayList<>();listview.setVisibility(View.GONE);isSelectedArea = myAdapter.getIsSelected();for (int i = 0; i < isSelectedArea.size(); i++) {isSelectedAreaTrue.put(i, isSelectedArea.get(i));if (isSelectedArea.get(i).equals(true)) {selectedListArea.add(area[i]);}}break;}}

阅读全文
0 0
原创粉丝点击