我正在使用Big Nerd Ranch 的 recyclerview-multiselect库来提供我RecyclerView
的CardViews
多选功能。我已经解决了大部分应用程序特定的问题,但我遇到了一个相当大的问题。每当RecyclerView
它进入SelectionMode
并且必须重新创建一张卡片时(这通常是因为这实际上是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());
}
老实说,在BigNerdRanch 库中窥探了这么多之后,我仍然不知道该怎么办!我在想我可能需要引入@Override
一个StateListDrawable
. 如何修复此错误?