Добавление нового элемента в верхнюю часть RecyclerView

Я добавляю элемент в позицию recyclerview 0 programamticly

public void addQuestion(Question question){
    this.questionList.add(0, question);
    notifyItemInserted(0);
}

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

есть ли какой-либо трюк, как элемент появляется вверху, и recyclerview автоматически прокручивается ?

4 ответов


также вы можете использовать mRecyclerView.smoothScrollToPosition(int position)

пример:

public void addQuestion(Question question){
    this.questionList.add(0, question);
    notifyItemInserted(0);
    mRecyclerView.smoothScrollToPosition(0);
}

обновление:

Если вы хотите сделать прокрутку до определенного пункта, очень спокойно можно взглянуть на ответ на этот вопрос

RecyclerView-как сгладить прокрутку до верхней части элемента в определенной позиции?


Да, вы можете сделать это

mRecyclerView.smoothScrollToPosition(0);

попробуй такое

mRecyclerView.smoothScrollToPosition(0);

Если я правильно понимаю, и Вы проблема в том, что вы уже прокрутили до верхней части списка, но при вставке вам пришлось прокрутить еще раз, чтобы увидеть элемент, вы можете попробовать мой подход, чтобы избежать этого.

по моему опыту, подход с прокруткой после вставки работает, но анимация не выглядит естественной.

Если вы действительно хотите сохранить анимацию, вы можете попробовать подход, который помог мне в моем проекте: используйте multi-typed recycler. Показать дополнительный элемент второго типа в положении 0 в вашем адаптере. Этот элемент может быть просто видом с небольшим заполнением, заголовком (Если вам нужно) или даже пустым видом. Затем notifyItemInserted (1), и вы получите хорошую анимацию вставки.

Примечание: этот подход может добавить сложности в ваш проект и требует знаний о многотипном представлении recycler.