gridview、listview适配器布局中带有checkbox实现的列表 checkbox只能有一项选中

来源:互联网 发布:37轩辕剑神臂进阶数据 编辑:程序博客网 时间:2024/06/06 01:51

先简单介绍下效果,手机话费充值、账户充值界面等有多个多选框选择套餐选项,默认只能有其中一项被选中,实现功能可以选择radiogroup和checkbox,但radiogroup在数据比较多的时候和布局比较复杂的情况下就不能很好的实现,所以采用checkbox来实现具体效果,请看效果图:


缴费金额可以由LinearLayout和relativelayout实现,但是充值套餐可能会有更多的套餐选择,为了更好的维护采用gridview来实现,整体思路就是gridview绑定的适配器中填充的convertview中只有一个checkbox,布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:button="@null"
        android:background="@drawable/box_blue_checked_selector"
        android:layout_centerHorizontal="true"
        android:textSize="16sp"
        />
</RelativeLayout>

可以根据具体的项目需求,checkbox做具体的修改,适配器中的代码:

public class BoxAdapter extends BaseAdapter{    private LayoutInflater inflater;    public BoxAdapter(Context context){        inflater = LayoutInflater.from(context);    }    @Override    public int getCount() {        return mList == null ? 0 : mList.size();    }
@Overridepublic Object getItem(int position) {    return mList.get(position);}@Overridepublic long getItemId(int position) {    return position;}
@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {    final ViewHolder viewHolder;    if (convertView == null){        convertView = inflater.inflate(R.layout.second_grid_item,null);        viewHolder = new ViewHolder(convertView);        convertView.setTag(viewHolder);    }else {        viewHolder = (ViewHolder) convertView.getTag();    }    String s = mList.get(position);    viewHolder.checkBox.setText(s);
            viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked) {
                        buttonView.setClickable(false);
                        if (button != null) {
                            button.setChecked(false);
                        }
                    }else button.setClickable(true);
                    button = buttonView;
                }
            });
            return convertView;
        }
    }

public class ViewHolder{    public CheckBox checkBox;    public ViewHolder(View view){        checkBox = (CheckBox) view.findViewById(R.id.checkBox);    }}
适配器中主要实现逻辑就是checkbox点击事件,定义一个临时compoundbutton对象变量,在checkboxonCheckedChangeListener中判断如果当前item被选中则把当前item设置成不可点击,实现反复点击当前item时一直保持被选中状态,然后判断button是否为空,第一次点击的时候button为空,所以buttonview赋值给button,如果button不为空说明点击了其它item,则把上一个点击的item置为没选中状态,将上一个item置成可点击状态,本文只是提供了思路,具体可根据项目需求进行修改

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