Android在Gridview中使用Checbox

来源:互联网 发布:linux 避免别人误删 编辑:程序博客网 时间:2024/06/10 02:53

Activity中:

//所用到的数据,和一些初始化

    ResultBean<PubInitBean> pubinit = (ResultBean<PubInitBean>) getIntent().getSerializableExtra("pubinit");    //创建一个hashMap来记录checbox的状态,传到adapter中    HashMap<Integer, Boolean> isSelected = new HashMap<>();    List<PubInitBean.ListItem> mCoommomPt = new ArrayList<PubInitBean.ListItem>();    mCoommomPt.addAll(pubinit.getData().getCommon_facilities_list());    //初始化checbox状态(用于编辑的时候,根据个人使用情况),savesstatus==1时被选中    for (int i = 0; i < mCoommomPt.size(); i++) {        if (1 == mCoommomPt.get(i).getSavestatus()) {            isSelected.put(i, true);        } else {            isSelected.put(i, false);        }    }    ptGridviewAdapter = new PtGridviewAdapter(mCoommomPt, this, isSelected);    mGridviewPtss.setAdapter(ptGridviewAdapter);

//实现adapter中的checbox的点击事件 0是全选功能的position,看个人情况

@Overridepublic void clickListener(View v) {    CheckBox checkBox = (CheckBox) v;    if (0 == position && !isSelected.get(0)) {//点击全选,之前未被选中        for (int i = 0; i < mCoommomPt.size(); i++) {            isSelected.put(i, true);            mCoommomPt.get(i).setSavestatus(1);            checkBox.setChecked(true);        }    } else if (0 == position && isSelected.get(0)) {//点击全选,之前被选中        for (int i = 0; i < mCoommomPt.size(); i++) {            isSelected.put(i, false);            ptGridviewAdapter.notifyDataSetChanged();            mCoommomPt.get(i).setSavestatus(0);            checkBox.setChecked(false);        }    } else if (isSelected.get(position)) {//点击的position以前被选中        mCoommomPt.get(position).setSavestatus(0);        checkBox.setChecked(false);        isSelected.put(position, false);    } else if (!isSelected.get(position)) {//点击的position以前未被选中        mCoommomPt.get(position).setSavestatus(1);        checkBox.setChecked(true);        isSelected.put(position, true);    }    ptGridviewAdapter.notifyDataSetChanged();

页面布局(一个简单的gridview):

<GridView    android:id="@+id/gridviewPtss"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_below="@+id/t1"    android:layout_marginRight="@dimen/dp_15"    android:layout_marginLeft="@dimen/dp_15"    android:layout_marginTop="@dimen/dp_20"    android:horizontalSpacing="@dimen/dp_20"    android:numColumns="3"    android:scrollbars="none"    android:stretchMode="columnWidth"    android:verticalSpacing="@dimen/dp_15"/>

GridviewAdapter的实现:

public class PtGridviewAdapter extends BaseAdapter implements View.OnClickListener {private List<PubInitBean.ListItem> mCoommomPt;private GridviewViewHolder holder;// 用来控制CheckBox的选中状况private HashMap<Integer, Boolean> isSelected;private MyClickListener mListener;public PtGridviewAdapter(List<PubInitBean.ListItem> coommomPt,  MyClickListener mListener, HashMap<Integer, Boolean> isSelected) {    mCoommomPt = coommomPt;    this.mListener = mListener;    this.isSelected = isSelected;}@Overridepublic int getCount() {    return mCoommomPt.size();}@Overridepublic Object getItem(int position) {    return mCoommomPt.get(position);}@Overridepublic long getItemId(int position) {    return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {    if (null == convertView) {        holder = new GridviewViewHolder();        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.gridview_ptss_item, null);        holder.mCbText = (CheckBox) convertView.findViewById(R.id.cb_text);        convertView.setTag(holder);    } else {        holder = (GridviewViewHolder) convertView.getTag();    }    holder.mCbText.setText(mCoommomPt.get(position).getContendt());    if (mCoommomPt.get(position).savestatus == 1)        holder.mCbText.setChecked(true);    holder.mCbText.setOnClickListener(this);    holder.mCbText.setTag(position);    //这是必须要加的, 根据isSelected来设置checkbox的选中状况    holder.mCbText.setChecked(isSelected.get(position));    return convertView;}public static class GridviewViewHolder {    public CheckBox mCbText;}@Overridepublic void onClick(View v) {    mListener.clickListener(v);}//自定义接口,用于回调按钮点击事件到Activity public interface MyClickListener {    public void clickListener(View v);}

}

Adapter的布局:

<CheckBox    android:id="@+id/cb_text"    android:layout_width="match_parent"    android:layout_height="@dimen/ptss_item_height"    android:layout_centerVertical="true"    android:background="@drawable/griview_pt_selector"    android:button="@null"    android:focusable="false"    android:gravity="center"    android:textColor="@color/griview_pt_color_selector"    android:textSize="@dimen/font15sp"/>
原创粉丝点击