我正在使用Big Nerd Ranch's 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
背景的任何来源。我发现的是a commented section in this class总结的。内容如下:
selectionModeBackgroundDrawable默认为StateListDrawable,当state_activated = true时显示colorAccent主题颜色,否则不显示。
在SwappingHolder
类中,您可以看到返回导致错误的StateListDrawable
的位置。此外,如果按照错误中的建议查看CardViewEclairMr1.java
,您可以看到最直接导致错误的方法:
private RoundRectDrawableWithShadow getShadowBackground(CardViewDelegate cardView) {
return ((RoundRectDrawableWithShadow) cardView.getBackground());
}
老实说,在BigNerdRanch library中窥探之后,我仍然不知道该怎么办!我想我可能需要@Override
引入StateListDrawable
的BigNerdRanch方法,但是这会让我的手变得如此肮脏,它会破坏实现API的目的。 。如何解决此错误?
答案 0 :(得分:1)
答案有点晚,但这里有一些我发现并且对我有用的东西。 检查您的CardView布局是否包含在ViewGroup内,如果不是,则可能是问题所在。
SwappingHolder通过交换顶级视图的drawable来工作。 CardView使用自己的drawable,因此如果您将它用作顶级视图,它将无法工作
所以正确的方法是这个
<FrameLayout
...
>
<CardView
...
>
</CardView>
</FrameLayout>
或者您可以自己实施SelectableHolder界面,并选择显示所选项目的方式
所有这些都是作者单词所以这里是[链接到GitHub] [链接]到实际页面
[链接]:https://github.com/bignerdranch/recyclerview-multiselect/issues/14。 击>
祝好运 !