listview进行item多选、全选、反选操作。

  Context context;
    List list;
    boolean isCheck;
    // 用来控制CheckBox的选中状况
    private static HashMap isSelected;

    public CollectionListAdapter(Context context, List list, boolean isCheck) {
        this.context = context;
        this.list = list;
        this.isCheck = isCheck;
        isSelected = new HashMap();
        // 初始化数据
        initDate();
    }

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

    public static HashMap getIsSelected() {
        return isSelected;
    }

    public static void setIsSelected(HashMap isSelected) {
        CollectionListAdapter.isSelected = isSelected;
    }

    public void setIsCheck(boolean isCheck) {
        this.isCheck = isCheck;
    }

    @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 viewHolder = null;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            convertView = View.inflate(context, R.layout.item_coll, null);
            viewHolder.iv_icon = (ImageView) convertView.findViewById(R.id.iv_icon);
            viewHolder.isCheakBox = (CheckBox) convertView.findViewById(R.id.isCheakBox);
            viewHolder.tv_time = (TextView) convertView.findViewById(R.id.tv_time);
            viewHolder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
            viewHolder.tv_jiangshi = (TextView) convertView.findViewById(R.id.tv_jiangshi);
            viewHolder.tv_fenlei = (TextView) convertView.findViewById(R.id.tv_fenlei);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        MineCollectionEntity.BodyBean.ElementsBean bean = list.get(position);
        if (!TextUtils.isEmpty(bean.getCourseImgPath())) {
            Picasso.with(context).load(bean.getCourseImgPath()).placeholder(R.drawable.home_top).error(R.drawable.home_top).into(viewHolder.iv_icon);
        }
        if (isCheck) {
            viewHolder.isCheakBox.setVisibility(View.VISIBLE);
            viewHolder.isCheakBox.setChecked(getIsSelected().get(position));
        } else {
            viewHolder.isCheakBox.setVisibility(View.GONE);
        }
        final ViewHolder finalViewHolder = viewHolder;
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finalViewHolder.isCheakBox.setChecked(!finalViewHolder.isCheakBox.isChecked());
                getIsSelected().put(position, finalViewHolder.isCheakBox.isChecked());
            }
        });
        viewHolder.isCheakBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                getIsSelected().put(position, isChecked);
            }
        });
        viewHolder.tv_time.setText(bean.getDuration());
        viewHolder.tv_title.setText(bean.getCourseName());
        viewHolder.tv_jiangshi.setText(bean.getAuthorName());
        return convertView;
    }


    class ViewHolder {
        ImageView iv_icon;
        TextView tv_time, tv_title, tv_jiangshi, tv_fenlei;
        CheckBox isCheakBox;
    }
将点击的item的position保存到map中。
 
  
 @OnClick(R.id.tv_all)
    public void allClick() {
        isAll = !isAll;
        if (isAll) {
            tv_all.setText("反选");
            for (int i = 0; i < list.size(); i++) {
                CollectionListAdapter.getIsSelected().put(i, true);
            }
        } else {
            for (int i = 0; i < list.size(); i++) {
                tv_all.setText("全选");
                if (CollectionListAdapter.getIsSelected().get(i)) {
                    CollectionListAdapter.getIsSelected().put(i, false);
                } else {
                    CollectionListAdapter.getIsSelected().put(i, true);
                }
            }
        }
        adapter.notifyDataSetChanged();
    }
通过点击事件改编listview的显示。
 
 

你可能感兴趣的:(android)