gridview、listview适配器布局中带有checkbox实现的列表 checkbox只能有一项选中
2017-05-23 17:11
381 查看
先简单介绍下效果,手机话费充值、账户充值界面等有多个多选框选择套餐选项,默认只能有其中一项被选中,实现功能可以选择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做具体的修改,适配器中的代码:
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;
}
}
适配器中主要实现逻辑就是checkbox点击事件,定义一个临时compoundbutton对象变量,在checkboxonCheckedChangeListener中判断如果当前item被选中则把当前item设置成不可点击,实现反复点击当前item时一直保持被选中状态,然后判断button是否为空,第一次点击的时候button为空,所以buttonview赋值给button,如果button不为空说明点击了其它item,则把上一个点击的item置为没选中状态,将上一个item置成可点击状态,本文只是提供了思路,具体可根据项目需求进行修改
缴费金额可以由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(); }
@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) { 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置成可点击状态,本文只是提供了思路,具体可根据项目需求进行修改
相关文章推荐
- 用ListView和GridView实现的,第一个item默认选中的二级列表
- 带有CheckBox的ListView,实现删除和选中功能
- GridView控件与CheckBox结合,实现全选功能,同时实现删除选中的多行数据
- GridView/ListView + ObjectDataSource + Entity 实现Webform列表真分页
- Android中ListView、GridView里的CheckBox混乱且记录选中数量不准确的解决方案
- ListView 中的每一项添加一个checkbox复选框,实现复选功能
- 2014-10-27Android学习------布局处理(八)------自定义ListView的监听事件和Adapter的实现-----城市列表应用程序
- Android 下实现带有图标和Checkbox的 ListView Item(2)
- Jquery实现页面上所有的checkbox只能选中一个
- Android中ListView如何获取列表中选中的CheckBox
- 在网页上添加一个CheckBox控件和一个RadioButton控件,实现CheckBox控件与RadioButton控件中的项目互选,即选中CheckBox中的一项相应的RadioButton中对应的项也选中,反之依然,条件是CheckBox控件不能多选
- 【Android开发】自定义ListView,使用通用适配器,并实现ListView上的每一项和每一项上的按钮等控件同时监听
- ExpandableListView 功能界面布局探究之三(没有child的下拉列表,group不展开的实现)
- 关于ListView中的Adapter说明以及列表增加最后一项(更多选项)的实现
- Android listview&gridview getview 方法多次调用问题解决方法 并附上单页加载实现问卷调查适配器源代码
- 在GridView中加入CheckBox实现全选以及提交CheckBox选中的相关内容
- GridView控件与CheckBox结合,实现全选功能,同时实现删除选中的多行数据 .
- Activity在GridView和ListView之间切换使用一个布局实现的方法
- Android学习笔记---19_采用ListView实现数据列表显示,以及各种适配器使用,和如何写自己的适配器
- Android学习-实现一个ListView中由Checkbox和TextView构成的布局