У меня есть макет с 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(); }
Проблема в том, что я вижу новый элемент только при касании или прокрутке представления.
Что мне не хватает?
ОБНОВИТЬ:
Для исправления проблемы я заменил строки
adapter.notifyDataSetChanged(); recyclerView.invalidate();
с
adapter.notifyItemRangeInserted( loadingMore ? 1 : 0, msgs.length() );
И это сработало
Попробуйте указать позицию вставленного или удаленного элемента вместо notifyDataSetChanged();
, вы можете использовать
notifyItemInserted(int pos); notifyItemRangeChanged(int start, int end);`