美文网首页Android技术知识Android开发Android开发
RecyclerView中某项Item无法点击问题

RecyclerView中某项Item无法点击问题

作者: zii4914 | 来源:发表于2020-01-10 17:24 被阅读0次

    踩坑

    其实之前也遇到过这个问题,用户说recyclerview中某个item无法点击,是oppo某一机型,但是在其他手机和模拟器都没有出现该问题,以为只是oppo特定版本系统的兼容性问题。
    然后在最近提测的一个版本中很多手机也出现了类似的问题(我经常用模拟器运行调试,以及自己手机最新MIUI11安卓10,都没有发现这种问题)。recyclerview中,第一项中的子内容可以点击,但是第二项点击无效,获取不了焦点,滑动到第三项又可以。

    原因

    回去思考了一下,注意到每次这个recyclerview加载内容后,他的第一项的第一个EditText总是第一时间获取了焦点,并且有光标在闪烁。所以考虑,应该是Item布局中的EditText第一时间获取焦点导致的,而且滑动的时候,我的recyclerview一屏,只有2项,所以夺去了第二项的焦点,滑动到第三项的时候,第一项可能已经被回收,释放了焦点,所以又可以点击了。

    寻找答案

    然后Google了一下EditeText不在一开始获取焦点,没想到这个问题在stack overflow中也很多赞,2k+,回答也结果也很实用。
    一般都是采取在其父布局中添加 android:focusableInTouchMode="true"属性。直译理解是,允许在触摸模式中获取焦点。
    如此设置后recyclerview滑动时,因为会点击到父布局,所以会把EditText的焦点移除了,从而避免即使滑动EditText也持有焦点的问题。
    而我是采用了另外一种方案,额外添加android:descendantFocusability="beforeDescendants"属性,直译理解是,子孙布局焦点配置。beforeDescendants意思是在子孙布局之前获得焦点,即优先度高于子布局。

    结论

    如果你也是跟我一样,在RecyclerView的Item中使用EditText,那么建议你在顶层容器布局中,添加

    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true"
    

    相关文章

      网友评论

        本文标题:RecyclerView中某项Item无法点击问题

        本文链接:https://www.haomeiwen.com/subject/smapactx.html