如何修改/适应API库中的方法



我正在使用Big Nerd Ranch的recyclerview-multiselect库来为我的RecyclerViewCardViews提供多选择功能。我已经解决了大多数应用程序的特定问题,但我遇到了一个相当大的问题。每当RecyclerViewSelectionMode 必须重新创建卡(这通常,因为这实际上是RecyclerView的点,至少如果我理解正确,)它抛出这个错误:

java.lang.ClassCastException: android.graphics.drawable.StateListDrawable cannot be cast to android.support.v7.widget.RoundRectDrawableWithShadow
        at android.support.v7.widget.CardViewEclairMr1.getShadowBackground(CardViewEclairMr1.java:159)
        at android.support.v7.widget.CardViewEclairMr1.getMinWidth(CardViewEclairMr1.java:150)
        at android.support.v7.widget.CardView.onMeasure(CardView.java:181)
        at android.view.View.measure(View.java:16498)

逻辑上,我遵循错误的任何来源导致StateListDrawable被设置为CardView的背景。这个类 中的注释部分总结了我的发现。它的内容如下:

selectionModeBackgroundDrawable默认为StateListDrawable,当state_activated=true时显示colorAccent主题颜色,否则不显示。

SwappingHolder类中,您可以看到在何处返回导致错误的StateListDrawable。此外,如果您查看CardViewEclairMr1.java,就像错误中建议的那样,您可以看到最直接导致错误的方法:

private RoundRectDrawableWithShadow getShadowBackground(CardViewDelegate cardView) {
        return ((RoundRectDrawableWithShadow) cardView.getBackground());
    }

老实说,在bignerdrach库中窥探了这么多之后,我仍然不知道该怎么做!我想我可能需要@Override的bignerdrach方法带来了一个StateListDrawable,但这会让我的手太脏的库,它会打败实现他们的API的目的开始。如何修复此错误?

给出答案有点晚了,但我发现了一些对我有用的东西。检查你的CardView布局是否被包装在ViewGroup中,如果不是,那可能是问题所在。

SwappingHolder通过交换顶层视图的可绘制对象来工作。CardView使用自己的drawables,所以如果你用它作为顶层视图,它将无法工作。
正确的方式是这个
<FrameLayout ... > <CardView ... > </CardView> </FrameLayout>
或者您可以自己实现SelectableHolder接口,并选择如何显示所选项目。
这些都是作者的文字所以这里有一个[链接到GitHub][链接]到实际页面
(链接):https://github.com/bignerdranch/recyclerview-multiselect/issues/14。>

相关内容

  • 没有找到相关文章

最新更新