Réglage de l'image de fond d'un CardView à l'intérieur de RecyclerView les causes de la panne du programme lors du défilement

J'ai un RecyclerView contenant une liste de CardViews avec des informations extraites à partir d'un serveur, certaines cartes ont seulement une couleur d'arrière-plan, mais certains contient une image de fond. Si les cartes ont tous simplement les couleurs de fond, la RecyclerView comporte en conséquence (je suis en mesure de définir les marges et le rayon de l'angle). Cependant, si un carte contient une image de fond, un accident va se produire lorsque j'essaie de défilement vers le haut/bas de la liste (même si l'image d'arrière-plan vous permettra de charger sans définie au préalable le rayon de l'angle).

Ici est le rapport de crash:

java.lang.ClassCastException: android.graphics.drawable.BitmapDrawable cannot be cast to android.support.v7.widget.RoundRectDrawable
at android.support.v7.widget.CardViewApi21.setBackgroundColor(CardViewApi21.java:107)
at android.support.v7.widget.CardView.setCardBackgroundColor(CardView.java:234)
at co.roverlabs.sdk.ui.CardListAdapter.onBindViewHolder(CardListAdapter.java:88)
at co.roverlabs.sdk.ui.CardListAdapter.onBindViewHolder(CardListAdapter.java:28)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:4402)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3717)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3609)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1859)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1311)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1274)
at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1102)
at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:959)
at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:3062)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:549)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Voici mon onBindViewHolder (), méthode (simplifié avec des valeurs codées en dur pour faciliter la lecture):

public void onBindViewHolder(final CardViewHolder holder, int position) {
//Set margins
CardView.LayoutParams cardLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 2000);
cardLayoutParams.setMargins(20, 20, 20, 20);
holder.cardView.setLayoutParams(cardLayoutParams);
//Set background color or image
if(view.hasBackgroundImage()) {
holder.cardView.setBackground(R.drawable.background);
}
else {
holder.cardView.setCardBackgroundColor(Color.CYAN);
}
//Set border radius
holder.cardView.setRadius(20);
//Set elevation
holder.cardView.setCardElevation(0);

Voici mon onCreateViewHolder() la méthode et personnalisé Recycleur.ViewHolder méthode:

public CardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false);
return new CardViewHolder(itemView);
}
public class CardViewHolder extends RecyclerView.ViewHolder {
protected CardView cardView;
public CardViewHolder(View view) {
super(view);
cardView = (CardView)view.findViewById(R.id.single_card_view);
}
}

Et enfin, voici mon fichier XML pour la CardView:

<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/single_card_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/single_card_view_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</android.support.v7.widget.CardView>

Je souhaite juste savoir comment définir l'arrière-plan d'un CardView à une image personnalisée au lieu de juste une couleur, et si il existe des solutions de contournement. Il est important pour moi d'être en mesure de définir le rayon de l'angle de la cartes de. Merci!!!!

OriginalL'auteur ooxxoo | 2015-04-28