5

मैं एक 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 की पृष्ठभूमि सेट करने का तरीका चाहते हैं, और अगर कोई कामकाज से जुड़े हैं। मेरे लिए कार्ड के कोने त्रिज्या को सेट करने में सक्षम होना महत्वपूर्ण है। धन्यवाद!

उत्तर

9

मान लें कि आप कार्डव्यू का उपयोग कर रहे हैं, तो आप पृष्ठभूमि को बदलने योग्य नहीं बदल सकते हैं क्योंकि कार्डव्यू कार्ड खींचने के लिए पृष्ठभूमि को खींचने योग्य बनाता है। आप setCardBackgroundColor के माध्यम से कार्ड पृष्ठभूमि रंग बदल सकते हैं।

+0

यह दुखद सही है, https://code.google.com/p/android/issues/detail?id=77843 देखें – ooxxoo

संबंधित मुद्दे