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();
}
проблема в том, что я вижу новый элемент только тогда, когда я касаюсь или прокручиваю представление.
что я упустил?
обновление:
чтобы исправить проблему, Я заменил строки
adapter.notifyDataSetChanged();
recyclerView.invalidate();
С
adapter.notifyItemRangeInserted( loadingMore ? 1 : 0, msgs.length() );
и он работал
3 ответов
попробуйте указать позицию вставленного или удаленного элемента вместо notifyDataSetChanged();
. вы можете использовать
notifyItemInserted(int pos);
notifyItemRangeChanged(int start, int end);`
одним из возможных решений является использование Realm Adapter. Thant будет управлять положением прокрутки на основе вставки / обновления / удаления автоматически. Нет никаких мерцающих эффектов. Недостатком является то, что у вас есть объект extend как объект Realm.
поскольку на вопрос уже дан ответ, вы можете использовать еще одну строку для прокрутки до последней позиции вашего recyclerView, используя:
recyclerView.smoothScrollToPosition(msgs.length()-1)