2016-07-01 3 views
6

У меня есть макет с RecyclerView с адаптером:обновления RecyclerView только на свитке

public class SimpleRecyclerAdapter extends RecyclerView.Adapter<SimpleViewHolder> { 

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

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

Я обновить это адаптер, как:

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

Проблема заключается в том, что я получаю, чтобы увидеть новый элемент, только когда я касаюсь или просматриваю вид.

Что мне не хватает?

UPDATE:

, чтобы решить эту проблему, я заменил строки

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

с

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

и работал

ответ

3

попробуйте указать позицию элемента, вставленного или удален вместо notifyDataSetChanged();. вы можете использовать

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