使用选择时,TextView 的波纹效果在长按时卡住

问题描述

我最近重构了我的应用程序以使用喷气背包导航。在我的 MainActivity 上,我有一个 ViewPager,其中包含 3 个片段,每个片段有 1 个 recyclerview。因此,我将 ViewPager 从 Activity 移到了新的 Fragment。就功能本身而言,一切正常,但出现了一个新问题,这让我很烦恼:当我长按在回收视图上选择一个项目时,涟漪效应会卡住并停留在那里,就好像我还在按项目,我没有。这是所选项目的图片。可以看出,涟漪效应在 TextView 上保持活动状态。

Here is a picture of a selected item

当我取消选择 Item 时,涟漪效果也会保持活动状态:

enter image description here

选择本身由 android SelectionTracker 处理。 TextView 的背景设置为 background="?android:attr/selectableItemBackground"。整个 ViewItem 的背景设置为 android:background="@drawable/bg_multi_selection,而 bg_multi_selection 文件如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
         <item android:drawable="@color/secondaryLightColor" android:state_activated="true" />
         <item android:drawable="@android:color/transparent" />
   </selector>

这可能是什么问题?这尤其奇怪,因为当 ViewPager 及其片段包含在 Activity 而不是 Fragment 中时,问题并不存在。有关如何解决此问题的任何建议?

解决方法

我找到了一个适合我的解决方案。所以对于任何感兴趣的人,我做了以下事情:

在 onBindViewHolder() 方法的 recyclerviewadapter 中,我检查元素是否被选中,并以编程方式另外设置 TextView 的背景颜色和背景资源。

if (elementIsSelected) {
                viewHolder.viewBinding.itemTextView.setBackgroundColor(context.resources.getColor(R.color.transparent,context.theme))
            } else {
                val outValue = TypedValue()
                context.theme.resolveAttribute(android.R.attr.selectableItemBackground,outValue,true)
                viewHolder.viewBinding.itemTextView.setBackgroundResource(outValue.resourceId)
            }

而我将颜色定义为透明,即#00000000

这个问题只出现在某些设备上很奇怪,所以我不确定“真正的”问题是否出在其他地方,但至少我是这样解决的。希望这可能对其他人有帮助。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...