0

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

这是所选项目的图片

当我取消选择项目时,涟漪效果也保持活跃: 在此处输入图像描述

选择本身由 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 中而不是片段中时,问题并不存在。对于如何解决这个问题,有任何的建议吗?

4

1 回答 1

0

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

在 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

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

于 2021-07-30T13:28:10.200 回答