Android ListView单选CheckBox

思路

1触发事件setOnItemClickListener改变CheckBox

2在适配器的getView()里改变CheckBox状态,需要记录选中的CheckBox位置

3适配器提供方法改变CheckBox

4用notifyDataSetChanged启动getView()

实现代码

//适配器
public class MyAdapter extends BaseAdapter {
        // 填充数据的list
        private ArrayList<Map<String, Object>> list;
        // 用来控制CheckBox的选中状况
        private HashMap<Integer,Boolean> isSelected;
        // 上下文
        private Context context;
        // 用来导入布局
        private LayoutInflater inflater = null;

        // 构造器
        public MyAdapter(ArrayList<Map<String, Object>> list, Context context) {
            this.context = context;
            this.list = list;
            inflater = LayoutInflater.from(context);
            isSelected = new HashMap<Integer, Boolean>();
            // 初始化数据
            initDate();
        }

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

        @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(int position, View convertView, ViewGroup parent) {

            // 导入布局并赋值给convertview
            convertView = inflater.inflate(R.layout.item_exchange_self, null);
            TextView tv_name = (TextView) convertView.findViewById(R.id.exchange_self_name);
            TextView tv_address = (TextView) convertView.findViewById(R.id.exchange_self_address);
            TextView tv_date = (TextView) convertView.findViewById(R.id.exchange_self_date);
            CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.select_address);
            // 设置list中TextView的显示
            tv_name.setText(list.get(position).get("name").toString());
            tv_address.setText(list.get(position).get("address").toString());
            tv_date.setText(list.get(position).get("workDates").toString());
            // 根据isSelected来设置checkbox的选中状况
            checkBox.setChecked(getIsSelected().get(position));
            return convertView;
        }

        public HashMap<Integer,Boolean> getIsSelected() {
            return isSelected;
        }

        public void setIsSelected(int postiton) {
            initDate();
            this.isSelected.put(postiton, true);
            notifyDataSetChanged();
        }
    }
//ListView
ListView exchangeCenters = (ListView) findViewById(R.id.exchange_centers);
        final MyAdapter myadapter = new MyAdapter(getData(),this);
        exchangeCenters.setAdapter(myadapter);
        exchangeCenters.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                myadapter.setIsSelected(position);
                exchangeCenter = getData().get(position);
            }
        });

布局的注意事项

1.CheckBox自身的点击要关闭,添加属性android:clickable=”false”

2.item的总部局需要加android:descendantFocusability=”blocksDescendants”保证ListView点击事件正常

3.ListView属性加android:layout_weight=”1”保证不会覆盖下方的按钮

时间: 2024-08-01 00:05:54

Android ListView单选CheckBox的相关文章

android ListView中CheckBox错位的解决

貌似已经很晚了,但是还是想记下笔记,想让今天完满. 在ListView中加了checkBox,可是发现点击改变其选中状态的时候,发现其位置错乱.状态改变的并不是你选中的,百思不得其解.后面通过上网查资料,可是个说纷纭,但是我还是找到了解决办法. 在自定义的适配器中,对checkBox的设置如下: 记住两者的顺序,先对checkBox进行事件监听,再设置其状态.前提在布局中对checkBox的状态设为false. android ListView中CheckBox错位的解决,布布扣,bubuko.

Android ListView带CheckBox实现单选

这个应该是个经常会遇到的需求,网上找了很多的demo感觉说的有点太长于是自己抽空干脆记录一下,目前我实现listView带CheckBox单选主要用两种方法 1,用一个bean记录状态,每次getView的时候去判断这个bean的状态 2,判断点击的position是否跟getView的position一致,这种办法耦合性较低不建议使用 效果图: 第1种方法: 首先是我们的bean: public class Bean { private boolean isChecked; private S

android ListView单选功能

在Adapter  getView内部实现控制. private int selectPosition =-1; class PayAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return payList==null?0:payList.size(); } @Override public Object getItem(int position)

求代码:android listview checkbox 从数据库里读取数据后怎么设置相应的checkbox为选中状态

============问题描述============ 现在有一个android listview 带checkbox,从数据库里调取相应数据后,绑定到listview 上. 那么怎么将listview 里的checkbox的选择状态与在数据库中记录一一对应? 求给出代码. 我在自定义BaseAdapter类中,getView方法中无法实现. ============解决方案1============ 这样 你点击的时候 是不是 会获取一个view  通过这个view 获取你那个 checkb

Android在listview添加checkbox实现单选多选操作问题

android根据View的不同状态更换不同的背景http://www.eoeandroid.com/thread-198029-1-1.html android 模仿朋友网推出的菜单效果[改进版]http://www.eoeandroid.com/thread-198019-1-1.html 让服务器iis支持.apk文件下载的设置方法http://www.eoeandroid.com/thread-198033-1-1.html 在 android 某些开发需求当中,有时候需要在listve

Android在listview添加checkbox实现单选多选操作问题(转)

转自:http://yangshen998.iteye.com/blog/1310183 在Android某些开发需求当中,有时候需要在listveiw中加入checkbox实现单选,多选操作.表面上看上去只是改变checkbox那么简单,然而实际开发中,实现起来并不是那么得心应手.尤其当listview比较多(比如屏幕最多只能显示10个item,但总共有12个item,也就是说listview的item数大于屏幕能够显示的item数)滑动屏幕的时候,由于适配器中getview()会重复使用被移

android的listview加checkbox实现单保存checkbox的勾选信息

最近做一个项目时想要增加安卓端的一个功能,就是增加一个activity上面有很多checkbox的勾选信息,然后可以给人选择多选框,看起来还算很简单..但是真正做起来就有很多麻烦了.. 虽然我对安卓有点了解,以前也看过一些代码,但都是看别人的代码,看代码当然简单啦,这下要全部自己写,这下有点棘手了,一开始真是无从下手啊,后来去网上查了一下,觉得有个人的写法不错,就是用listview导入adapter的布局这样子,于是我就照着他的代码的原型开始改了起来. 改了N久,终于改的有点样子了,其中也花了

Android ListView条目全选功能,不用checkbox实现!

大家好,翻了翻以前的笔记,发现了一个我特别标记的功能,那就是ListView全选功能,顿时想起了我那个时候苦逼的生涯,由于我大学机械出身,大学毕业了都不知道什么叫代码,在58干了一段销售.实在是干不下去了,不干了就得在网上找工作,就喜欢干电脑相关的工作,有一天,一家培训机构给我打来电话让我去面试,我以为让我去工作那,谁知道是忽悠我去培训,我当然不可能花钱了,就直接回去了,想了几天,除了销售我真不知道干啥,咬咬牙,就花钱培训了.我擦,咋说这到了,不跟你们说了,还是写下面的这个功能吧,虽然很简单,但

Android高级控件(一)——ListView绑定CheckBox实现全选,添加和删除等功能

Android高级控件(一)--ListView绑定CheckBox实现全选,添加和删除等功能 这个控件还是挺复杂的.也是项目中应该算是比較经常使用的了,所以写了一个小Demo来讲讲,主要是自己定义adapter的使用方法.加了非常多的推断等等等等-.我们先来看看实现的效果吧! 好的,我们新建一个项目LvCheckBox 我们事先先把这两个布局写好吧,一个是主布局,另一个listview的item.xml.相信不用多说 activity_main.xml <LinearLayout xmlns: