2016-04-14 8 views
1

Ich habe einfache Aufgabe, aber ich verstehe nicht, warum es nicht funktioniert. Ich muss images in einem GridView platzieren. Ich entschied mich für die RecyclerView. So habe ich einige, wo ich es aufgegeben habe:RecyclerView wird überhaupt nicht aktualisiert

<LinearLayout 
    ..> 
    ... 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ebebeb"> 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/my_recycler_view1" 
     android:scrollbars="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
</FrameLayout> 
</LinearLayout> 

In meinem Activity Ich erkläre:

images = new ArrayList<>(); 
    recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view1); 

    adapter = new ImageGridAdapter(Place.this, images); 
    manager = new GridLayoutManager(this, 3); 
    recyclerView.addItemDecoration(new GridSpacingItemDecoration(3, 8, true)); // for grid with equal spacing 
    recyclerView.setLayoutManager(manager); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setAdapter(adapter); 

Wenn alle meine views und objects initialisiert werden, indem Retrofit2 I-Daten und versuchen, Adapter zu aktualisieren , zuvor erstellt.

 @Override 
     public void onResponse(Call<PlaceModel> call, Response<PlaceModel> response) { 
      placeProperties = response.body().getData(); 
      images = placeProperties.getPhotos(); 
      System.out.println("size = " + images.size()); 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        updateUI(placeProperties); 

        images.clear(); 
        images.addAll(placeProperties.getPhotos()); 
        adapter.notifyItemChanged(0, images.size()); 
        //just adapter.notifyDataSetChanged(); also doesn't give result; 

       } 
      }); 

     } 

Dennoch meine updateUI Methode funktioniert gut, und Updates Ansichten mit Daten aus placeProperties Objekt. Und die image.size()>1.

Hier ist eine Adapter Klasse. https://gist.github.com/burnix/aa27efe9586213852c108f3d79f3f69d

Gemäß den Protokollen funktioniert meine onBindViewHolder Methode nicht.

Was habe ich vermisst? Warum zeigt meine RecyclerView kein Bild?

P.S. Ich habe jede ähnliche Frage gelesen und das hilft nicht. Hoffe, ich bin nur müde und vernachlässige etwas sehr einfaches ...

+0

Versuchen Sie diese Zeile in onResponse Kommentierung aus(): '// Bilder = placeProperties.getPhotos();' –

+0

@DanielNugent, du bist so klug und aufmerksam! Es ist Arbeit;) –

Antwort

1

Der Grund, warum es nicht funktioniert, ist, dass Sie die Referenz für die Datenquelle des RecylerView neu zuweisen.

Alles, was Sie tun müssen, ist diese Zeile zu entfernen:

images = placeProperties.getPhotos(); 
+0

Vielen Dank für die Erklärung. Ich habe es! –