问题记录-如何让Listview子控件在点击之后失去点击事件

来源:互联网 发布:为知笔记 archlinux 编辑:程序博客网 时间:2024/05/17 00:12

如何让Listview的子控件在点击之后失去焦点

1.出现的问题

这里写图片描述

2.尝试解决的方法

基本都失败了,部分失效原因还没找到,知道的可以告知下,感谢。。。。。

1.将父布局设置为不可点击

mLvAppLock.setEnabled(false);

2.将item的子控件设置为不可点击,后来发现当你把一个控件设置了点击事件之后,系统会自动将该控件设置为可点击的。
源代码:

public void setOnClickListener(@Nullable OnClickListener l) {        if (!isClickable()) {            setClickable(true);        }        getListenerInfo().mOnClickListener = l;}

另外,在adapter中设置点击事件,每一个控件都会有自己独立的点击事件,要对这些控件的点击事件进行屏蔽与开启,单个来有些麻烦。

3.设置listview的android:descendantFocusability属性

自己定义listview可能会发生点击每一个item的时候没有反应,无法获取焦点。原因多半是由于在我们自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应。
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:

beforeDescendants:viewgroup会优先其子类控件而获取到焦点afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点mLvAppLock.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);

3.解决方案:

  • 使用FrameLayout布局包裹一个listview,一个透明的占满父布局的Button
  • 在刚开始的时候让这个Button隐藏,在点击了控件之后,想要让listview失去焦点,就让那个Button显示出来抢占焦点
  • 当我们想让Listview继续获取焦点的时候,就让Button再次隐藏即可。
    这里写图片描述

这里写图片描述

4.最后结果:监听动画,结束的时候隐藏遮盖层

这里写图片描述

0 0
原创粉丝点击