2016-07-01 20 views
6

Tôi có một bố trí với một RecyclerView với adapter:cập nhật RecyclerView chỉ trên cuộn

public class SimpleRecyclerAdapter extends RecyclerView.Adapter<SimpleViewHolder> { 

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

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

tôi cập nhật đó là bộ chuyển đổi như:

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(); 
} 

Vấn đề là, tôi có thể nhìn thấy sự mới chỉ khi tôi chạm hoặc cuộn chế độ xem.

Tôi đang thiếu gì?

UPDATE:

để khắc phục vấn đề tôi đã thay thế các dòng

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

với

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

và nó làm việc

Trả lời

3

thử xác định vị trí của mặt hàng đó chèn vào hoặc gỡ bỏ thay vì notifyDataSetChanged();. bạn có thể sử dụng

notifyItemInserted(int pos); 
notifyItemRangeChanged(int start, int end);` 
Các vấn đề liên quan