2016-07-01 34 views
6

Mam układ z RecyclerView z adapterem:aktualizacje RecyclerView tylko na zwoju

public class SimpleRecyclerAdapter extends RecyclerView.Adapter<SimpleViewHolder> { 

    protected List<JSONObject> data = new ArrayList<>(); 

    public List<JSONObject> getData() { return data; } 
}  

zaktualizować to adapter jak:

public void udpdateFromJson(JSONObject payload) { 
    JSONArray msgs = payload.optJSONArray("messages"); 
    for(int ix = 0; null != msgs && ix < msgs.length(); ix++){ 
    JSONObject o = msgs.optJSONObject(ix); 
    if(loadingMore) adapter.getData().add(1 + ix, o); 
    else adapter.getData().add(o); 
    } 

    adapter.notifyDataSetChanged(); 
    recyclerView.invalidate(); 
} 

Problemem jest to, że mogę zobaczyć nowy element tylko wtedy, gdy dotknę lub przewiń widok.

Czego mi brakuje?

UPDATE:

aby rozwiązać problem Wymieniłem linie

adapter.notifyDataSetChanged(); 
recyclerView.invalidate(); 

z

adapter.notifyItemRangeInserted(loadingMore ? 1 : 0, msgs.length()); 

i to działało

Odpowiedz

3

próby określenia położenia elementu wkładania lub wyjmowania zamiast notifyDataSetChanged();. możesz użyć

notifyItemInserted(int pos); 
notifyItemRangeChanged(int start, int end);`