मैं एक RecyclerView जानकारी के साथ CardViews है कि एक सर्वर से खींचा जाता है की सूची से युक्त है दुर्घटना का कारण बनता है, कुछ कार्ड केवल एक पृष्ठभूमि रंग है, लेकिन कुछ एक पृष्ठभूमि छवि शामिल । यदि कार्ड में सभी पृष्ठभूमि रंग हैं, तो रीसाइक्लर व्यू तदनुसार व्यवहार करता है (मैं मार्जिन और कोने त्रिज्या को भी सेट करने में सक्षम हूं)। हालांकि, अगर किसी एक कार्ड में पृष्ठभूमि छवि होती है, तो जब मैं सूची को ऊपर/नीचे स्क्रॉल करने का प्रयास करता हूं तो क्रैश तब होता है (हालांकि पृष्ठभूमि छवि पहले सेट कोने त्रिज्या के बिना लोड हो जाएगी)। (आसानी से पढ़ने के लिए कठिन कोडित मूल्यों के साथ सरलीकृत)RecyclerView अंदर एक CardView की पृष्ठभूमि छवि स्थापना कार्यक्रम स्क्रॉल जब
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)
यहाँ मेरी onBindViewHolder() विधि है:
यहाँ क्रैश लॉग है
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);
यहाँ है मेरी onCreateViewHolder() विधि और कस्टम Recycler.ViewHolder विधि:
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);
}
}
और अंत में, यहाँ वीं के लिए मेरे एक्सएमएल फ़ाइल है ई 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>
मैं सिर्फ जानना सिर्फ एक रंग के बजाय कोई कस्टम छवि के लिए एक CardView की पृष्ठभूमि सेट करने का तरीका चाहते हैं, और अगर कोई कामकाज से जुड़े हैं। मेरे लिए कार्ड के कोने त्रिज्या को सेट करने में सक्षम होना महत्वपूर्ण है। धन्यवाद!
यह दुखद सही है, https://code.google.com/p/android/issues/detail?id=77843 देखें – ooxxoo