2017-01-27 3 views
1

Ich habe einen REST-Service, paginate meine Anforderungen ... Ich muss auf meinem Recyclerview 20 itens einfügen und halten die 20 itens bevor geladen.Neue Artikel auf RecyclerView einfügen

Das ist mein Wunsch ...

VeiculoRequestHelper.veiculosPaginatedRequest(Request.Method.GET, url, null, new Response.Listener<VeiculoPaginated>() { 
     @Override 
     public void onResponse(VeiculoPaginated response) { 
      AnalyticsTracker.getInstance().sendEvent(AnalyticsEnum.Category.MY_VEHICLE, AnalyticsEnum.Action.CLICK, AnalyticsEnum.Label.SUCCESS); 

      isLast = response.isLast(); 

      ArrayList<Veiculo> veiculoArrayList = new ArrayList<>(); 
      veiculoArrayList.addAll(response.getContent()); 

      veiculos = veiculoArrayList; 

      mAdapter.addItem(veiculos); 

      mRecyclerView.setAdapter(mAdapter); 

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      AnalyticsTracker.getInstance().sendEvent(AnalyticsEnum.Category.MY_VEHICLE, AnalyticsEnum.Action.CLICK, AnalyticsEnum.Label.ERROR); 

      Toast.makeText(getActivity(), "Erro ao realizar listagem de veículos.", Toast.LENGTH_LONG).show(); 
     } 
    }); 

Dies ist meine Adapter Methode neues itens hinzufügen ...

public void addItem(ArrayList<Veiculo> veiculosArray) { 
    if (veiculos != null) { 
     veiculos.clear(); 
     veiculos.addAll(veiculosArray); 
     notifyItemInserted(veiculos.size() - 1); 
    } else { 
     veiculos = veiculosArray; 
    } 
    notifyDataSetChanged(); 
} 

, was ich falsch mache? Die Itens ist eingefügt, aber nicht die alten itens ... Hilfe bitte!

Antwort

1

Die alten Daten werden in addItem(ArrayList<Veiculo> veiculosArray) gelöscht werden:

if (veiculos != null) { 
    veiculos.clear(); // here they will be cleared 
    veiculos.addAll(veiculosArray); 
    notifyItemInserted(veiculos.size() - 1); 
} 

diese Linie Entfernen Sie die alten Elemente zu halten.

+0

Wenn ich veiculos.clear() entfernen; es fügt alle Daten ein, aber die recyclerview geht, um nicht zu beginnen, das letzte Einzelteil nicht zu behalten ... –

0

in Ihrem onResponse:

ArrayList<Veiculo> veiculoArrayList = new ArrayList<>(); 
      veiculoArrayList.addAll(response.getContent()); 

      veiculos = veiculoArrayList; 

      mAdapter.addItem(veiculos); 

      mRecyclerView.setAdapter(mAdapter); 

sehen, was passiert ist, wird veiculoArrayList-veiculos zugeordnet ist, bedeutet neue 20 Artikel sind jetzt drin. vorbei Veiculos in mAdapter.addItem(veiculos); und in Ihrem addItem Methode

veiculos.clear(); 
veiculos.addAll(veiculosArray); 

bedeutet, was jemals in veiculos war, wird klar und neue Liste veiculosArray würde hinzugefügt werden darin (bedeutet neue 20 Titel). Sie müssen nur nicht löschen, fügen Sie neue Artikel Liste und notifyDatasetChanged(). Um den Fokus auf den letzten Punkt zu legen, müssen Sie nur recyclerView.smoothScrollToPosition (position) setzen; und natürlich Position wäre veiculos.size() vor dem Hinzufügen neuer Elemente hinein.

notifyItemRangeInserted(lastListSize, newList.size()); 
+0

Wenn ich veiculos.clear() entferne; es fügt alle Daten ein, aber die recyclerview gehen, um nicht zu beginnen, das letzte Einzelteil ... –

+0

ich aktualisierte meine Antwort, Sie bewegen Position zum letzten Einzelteil Cam. –

+0

@FelipeA. 'notifyItemRangeInserted (lastListSize, newList.size());' siehe in Antwort. –