2016-07-04 24 views
3

Ich habe ein Problem mit der CardView in der RecyclerView. Mein CardView wurde plötzlich schwarz und mein RatingBar wurde blau. Ich verwende die InfiniteRecyclerView, aber die Änderung auf die einfache RecyclerView hat keine Auswirkungen. Ich kann die CardView Hintergrundfarbe zu Weiß ändern, aber die RatingBar wird noch blau sein. Dies ist ein Beispiel dafür, was passiert ist:CardView plötzlich schwarz

Black CardView

Ich verwende die normalen RecyclerView in einer anderen Tätigkeit innerhalb eines Fragments mit dem gleichen Adapter und es sieht ganz gut. Hier ein Beispiel:

Normal CardView

Dies ist die single_recipe_recycler_item.xml Layout-Datei:

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp" 
android:layout_marginTop="5dp"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:orientation="horizontal"> 

    <ImageView 
     android:id="@+id/recipe_recycler_image" 
     android:layout_width="80dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="center_vertical" 
     android:src="@mipmap/ic_launcher" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingBottom="5dp" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 
     android:paddingTop="5dp"> 

     <!-- RealmRecipe Title --> 
     <TextView 
      android:id="@+id/recipe_recycler_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentRight="true" 
      android:gravity="end" 
      android:text="Very very very very very very long title" 
      android:textColor="@color/colorBlack" 
      android:textSize="@dimen/title" 
      android:textStyle="bold" /> 

     <!-- Publisher --> 
     <TextView 
      android:id="@+id/recipe_recycler_publisher" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentRight="true" 
      android:layout_below="@id/recipe_recycler_title" 
      android:layout_marginTop="5dp" 
      android:text="Publisher" 
      android:textColor="@color/colorBlack" 
      android:textSize="@dimen/genre" 
      android:textStyle="italic" /> 

     <!-- Rating --> 
     <RatingBar 
      android:id="@+id/recipe_recycler_rating_bar" 
      style="@style/Widget.AppCompat.RatingBar.Small" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentRight="true" 
      android:layout_below="@id/recipe_recycler_publisher" 
      android:layout_marginTop="5dp" 
      android:isIndicator="true" 
      android:max="5" /> 

    </RelativeLayout> 

</LinearLayout> 

</android.support.v7.widget.CardView> 

Das ist mein AppTheme:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

Warum ist das passiert? Gibt es einen Fehler in CardView? Irgendwelche Vorschläge, wie Sie das beheben können?

+0

Welche Farbe hat 'selectableItemBackground' in Ihrem 'LinearLayout'? – Razor

+0

Das ist Hintergrund, der für Welleneffekt drawable ist. CardView wurde schwarz, bevor ich "selectableItemBackground" anwendete, also ist das nicht der Grund für das Problem. – frozzyk

+0

In welcher Android-Version testen Sie Ihre App? – Razor

Antwort

7

ich das gleiche Problem gestoßen und hier ist, wie ich es gelöst. Stellen Sie sicher, dass Ihr Adapter das Layout wie folgt aufbläst. Für Sie besser zu verstehen, nennen wir diesen Adapter MyAdapter

@Override 
public View getView(int position, View view, ViewGroup parent) { 
    if (view == null){ 
     LayoutInflater layoutInflater = (LayoutInflater) getContext() 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     view = layoutInflater.inflate(R.layout.recycler_row_layout_person, null, true); 

    } 

Dann für die Aktivität in dem es Ihren Adapter verwenden, stellen Sie sicher, dass Sie den richtigen Kontext verwenden. Nun sagen wir, dass wir MyAdapter in einer Aktivität namens MyActivity verwenden werden. Die falsch Möglichkeiten, das Layout Inflator mit dem falsch Kontext zu verwenden sind als

  1. Erste Wrong Way folgt

    MyAdapter adapter = new MyAdapter(
              getApplicationContext(), R.layout.recycler_row_layout_person, arrayList 
            ); 
    
  2. Second Wrong Way

    MyAdapter adapter = new MyAdapter(
              getContext(), R.layout.recycler_row_layout_person, arrayList 
            ); 
    

Hier ist die RECHTS Weg es zu tun. Und so habe ich es gelöst.

MyAdapter adapter = new MyAdapter(
           MyActivity.this, R.layout.recycler_row_layout_person, arrayList 
         ); 

Ich hoffe, es hilft

+0

Es sieht so aus, als wäre dieser Code für einen Adapter für eine 'ListView', nicht 'RecyclerView' – PPartisan

+0

Ja, das Problem lag in falschem Kontext! Vielen Dank! – frozzyk

3

hatte ich das gleiche Problem und versucht, dies, ist es für mich gearbeitet

card_view:cardBackgroundColor="#fff" 

Ihre XML-Datei

<android.support.v7.widget.CardView 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp" 
android:layout_marginTop="5dp" 
card_view:cardBackgroundColor="#fff"> 
+0

Ich habe mit der Art, wie der Kontext referenziert wurde, nichts falsches gesehen, aber das hat funktioniert. Ich denke, wenn Sie den Cardview in etwas anderes verpacken, ist das vielleicht auch kein Problem. – Justin

1

ich hatte das gleiche Problem. In meinem Fall definiere ich der Hintergrund in der falschen Eigenschaft, ich den Standard verwendet:

<android.support.v7.widget.CardView 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view" 
    android:layout_width="300dp" 
    android:layout_height="200dp" 
    android:layout_gravity="center" 
    android:layout_marginTop="8dp" 
    android:background="#ffffff"> 

Und Sie cardbackground Eigenschaft verwenden muß:

<android.support.v7.widget.CardView 
    ...  
    card_view:cardBackgroundColor="#ffffff"> 

, die den Trick für mich getan haben. Cardview hat eigene Eigenschaften und Sie müssen sie anstelle der Standardansichtseigenschaften verwenden. Das Gleiche passiert mit der Elevation-Eigenschaft.