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

Ripple effect of TextView gets stuck on long click, when selection is used

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

当我取消select 物品时,连锁反应也保持活跃:

selection 本身由 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 中而不是片段时。关于如何解决这个问题有什么建议吗?

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

在 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

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