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

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

1.出现的问题

2.尝试解决的方法

基本都失败了,部分失效缘由还没找到,知道的能够告知下,感谢。。。。。

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

mLvAppLock.setEnabled(false);

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

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

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

3.设置listview的android:descendantFocusability属性spa

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

beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不须要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接得到焦点

mLvAppLock.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);

3.解决方案:

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

      这里写图片描述

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

                 这里写图片描述

相关文章
相关标签/搜索