2

Big Nerd Ranchのrecyclerview-multiselectライブラリを使用して、複数選択機能を提供しています。アプリ固有の問題はほぼ解決しましたが、かなり大きな問題が発生しました。が入っていて、カードを再作成する必要があるときはいつでも(少なくとも私が正しく理解していれば、実際にはそれが のポイントであるため、多くの場合)、次のエラーがスローされます。RecyclerViewCardViewsRecyclerViewSelectionMode 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 は、state_activated=true の場合に colorAccent テーマの色を表示し、それ以外の場合は何も表示しない StateListDrawable にデフォルト設定されます。

クラス内で、エラーの原因となっている が返されているSwappingHolder場所を確認できます。StateListDrawableまた、CardViewEclairMr1.javaエラーで示唆されているように、 を調べると、エラーを最も直接的に引き起こしているメソッドを確認できます。

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

正直に言うと、BigNerdRanch ライブラリをいろいろ調べた後でも、どうすればよいかわかりません。私@OverrideStateListDrawable. このエラーを修正するにはどうすればよいですか?

4

1 に答える 1

1

答えが少し遅れましたが、ここに私が見つけたものがあります。CardView レイアウトが ViewGroup 内にラップされているかどうかを確認し、そうでない場合は問題である可能性があります。

SwappingHolder は、最上位ビューのドローアブルを交換することによって機能します。CardView は独自のドローアブルを使用するため、最上位ビューとして使用すると機能しません。
したがって、正しい方法はこれ
<FrameLayout ... > <CardView ... > </CardView> </FrameLayout>
です。または、 SelectableHolder インターフェイスを自分で実装して、選択したアイテムを表示する方法を選択することもできます。
これらはすべて著者の言葉なので、実際のページ [リンク] への [GitHub へのリンク] [リンク] は次の
とおりです: https://github.com/bignerdranch/recyclerview-multiselect/issues/14
幸運を !

于 2015-08-23T18:51:07.570 に答える