gpt4 book ai didi

java - 如何修改/适配 API 库中的方法?

转载 作者:行者123 更新时间:2023-11-30 11:00:11 27 4
gpt4 key购买 nike

我正在使用 Big Nerd Ranch's recyclerview-multiselect库为我的 RecyclerViewCardViews 提供多选功能。我已经解决了大部分应用程序特定的问题,但我遇到了一个相当大的问题。每当 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 defaults to a StateListDrawable that displays your colorAccent theme color when state_activated=true, and nothing otherwise.

SwappingHolder 类中,您可以看到导致错误的 StateListDrawable 被返回到哪里。此外,如果您按照错误中的建议查看 CardViewEclairMr1.java,您可以看到最直接导致错误的方法:

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

老实说,在 BigNerdRanch library 中进行了所有这些窥探之后,我仍然不确定该怎么办!我在想我可能需要 @Override BigNerdRanch 方法,它引入了一个 StateListDrawable,但这会让我的手对库很脏,它会破坏目的开始实现他们的 API。如何修复此错误?

最佳答案

答案有点晚了,但这是我发现的对我有用的东西。检查您的 CardView 布局是否包含在 ViewGroup 中,如果不是,则可能是问题所在。

SwappingHolder 通过交换顶级 View 的可绘制对象来工作。 CardView 使用自己的 drawable,因此如果将其用作顶级 View,它将无法工作。
所以正确的做法是这样
<FrameLayout
...
>
<CardView
...
>
</CardView>
</FrameLayout>

或者你可以自己实现 SelectableHolder 接口(interface),并选择你想要如何显示选中的项目。
所有这些都是作者的话 所以这里是 [链接到 GitHub] [链接] 到实际页面
【链接】: https://github.com/bignerdranch/recyclerview-multiselect/issues/14 . 祝你好运 !

关于java - 如何修改/适配 API 库中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31645655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com