Android listview中使用checkbox「建议收藏」

Android listview中使用checkbox「建议收藏」最近比较忙碌,我也不知道忙的什么东西,打算写的博客写了一半,还没写完,今天先扯一扯项目中遇到的一个问题,一方面防止以后遇到这个问题忘记如何解决,另一方面希望可以提供给遇到同样问题的朋友一个思路.下面开始正题,在listview的item中使用checkbox,当你按照普通的listview的用法使用时,你会遇到下面这样的问题:1.checkbox可以点击,但是listview的item无法

大家好,又见面了,我是你们的朋友全栈君。最近比较忙碌,我也不知道忙的什么东西,打算写的博客写了一半,还没写完,今天先扯一扯项目中遇到的一个问题,一方面防止以后遇到这个问题忘记如何解决,另一方面希望可以提供给遇到同样问题的朋友一个思路.

下面开始正题,在listview的item中使用checkbox,当你按照普通的listview的用法使用时,你会遇到下面这样的问题:

1.checkbox可以点击,但是listview的item无法点击

2.无法获得checkbox被点击的是哪一行

第一个问题涉及到事件分发,下一篇再扯(我会按照我的理解,通俗易懂的来描述),第二个问题我的理解就是getview无法重绘的原因,这里拿不到position的值,为了能解决我的问题,我需要换一种思路,也就是我今天介绍的方法:屏蔽checkbox的选择事件,也就是说checkbox不能响应选中事件,当用户点击listview的item时,制造假象,用代码控制选中checkbox

恩,差不多就这些了,由于代码直接写到项目中了,就不写demo了,直接贴一下主要代码,仅供参考,如果您有更好的方法可以相互交流

1,设置 checkbox无法响应点击事件

android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false" 

2.适配器中声明一个值用来控制checkbox的选中情况

private static HashMap<Integer,Boolean> isSelected;

public static HashMap<Integer,Boolean> getIsSelected() {  
        return isSelected;  
    }  
  
    public static void setIsSelected(HashMap<Integer,Boolean> isSelected) {  
    	MyDocShowAdapter.isSelected = isSelected;  
    }  

isSelected = new HashMap<Integer, Boolean>(); 
        for(int i=0; i<list.size();i++) {  
            getIsSelected().put(i,false);  
        } 

3.根据item的点击情况,给checkbox赋值

mListView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				ViewHolder holder = (ViewHolder) view.getTag(); 
				holder.mCheckBox.toggle();
				MyDocShowAdapter.getIsSelected().put(position, holder.mCheckBox.isChecked());
			}
		});

今天就到这,有问题请留言,多交流

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163299.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月22日 上午6:00
下一篇 2022年7月22日 上午6:16


相关推荐

  • label标签的用法「建议收藏」

    label标签的用法「建议收藏」label标签for属性

    2022年8月2日
    11
  • JQuery的delegate事件参数说明[通俗易懂]

    JQuery的delegate事件参数说明[通俗易懂]JQuery的delegate事件: delegate()方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。 使用delegate()方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。 $(selector).delegate(childSelector,event,dat

    2022年10月21日
    4
  • Web Services到底是什么

    Web Services到底是什么最近刚刚接触到 Onvif 协议 其规范中设备管理和控制部分所定义的接口均以 WebServices 的形式提供 那这个 WebServices 到底是个什么玩意啊 经过一番周折 搜集到了不少形象易懂的解释和大家分享下 1 楼 比如说很多软件都有天气预报的功能 比如主面板上就有显示天气的信息但是这些信息可能是从气象局得到的 怎么得到的呢 就是用 webservice 比如

    2026年3月20日
    2
  • motan源码分析七:序列化

    motan源码分析七:序列化motan 的序列化支持两种协议 一种是 json 另一种是 hessian2 主要涉及到的类和接口是是 FastJsonSeri Hessian2Seri Serializatio Codec AbstractCode NettyDecoder NettyEncoder DefaultRpcCo 和 CompressRpcC 等 1 FastJs

    2026年3月17日
    2
  • java.lang.NullPointerException出现的几种原因以及解决

    java.lang.NullPointerException出现的几种原因以及解决java.lang.NullPointerException出现的几种原因:1、字符串变量未初始化2、接口类型的对象没有用具体的类初始化,比如:Mapmap//会报错Mapmap=newMap();//则不会报错了3、当一个对象的值为空时,你没有判断为空的情况。4、字符串与文字的比较,文字可以是一个字符串或Enum的元素,如下会出现异常Stringstr…

    2022年5月20日
    48
  • js对数字数组排序[通俗易懂]

    js对数字数组排序[通俗易懂]js中经常需要用到对数组进行排序的操作,当数组中的元素均为数字时,直接使用sort()进行排序得到的结果可能不是你想要的结果。假如我有数组arrayNums=[15,2,16],直接使用arrayNums.sort()的排序结果将是[15,16,2],这是因为Javascript的sort()函数在默认情况下是按照字符串顺序对值进行排序的。正因如此,sort()方法在对数值排序时会产生…

    2022年5月15日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号