Как сохранить RecyclerView всегда прокрутки вниз
Я использую Recyclerview Replace со списком
Я хочу, чтобы Recyclerview всегда прокручивал нижнюю часть.
ListView может использовать этот метод setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL)
RecyclerView Я использую метод smoothScrollToPosition(myAdapter.getItemCount() - 1)
но когда Soft клавиатура Pop, ее замените содержимое RecyclerView.
Ответы
Ответ 1
Это связано с тем, что RV считает, что его опорная точка верна, и когда клавиатура появляется, размер RV обновляется родителем, а RV сохраняет стабильную опорную точку. (таким образом, удерживает верхнее положение в том же месте)
Вы можете установить LayoutManager # ReverseLayout значение true, и в этом случае RV будет содержать элементы макета с конца адаптера.
например. положение адаптера 0 находится внизу, 1 над ним и т.д.
Это, конечно же, потребует от вас изменения порядка вашего адаптера.
Я не уверен, но установка stack from end также может дать вам тот же результат без переупорядочения вашего адаптера.
Ответ 2
Если вы хотите, чтобы позиция прокрутки была привязана к нижней части RecyclerView
, она полезна в приложениях чата. просто вызовите setStackFromEnd(true)
на LinearLayoutManager
, чтобы клавиатура сохранила элементы списка, закрепленные внизу (клавиатура), а не верх.
Ответ 3
Я столкнулся с одной и той же проблемой, и решил ее с помощью упомянутого подхода здесь. Он используется для определения того, открыта или нет открытая программная клавиатура, и если она открыта, просто вызовите метод smoothScrollToPosition()
.
Более простое решение состоит в том, чтобы дать вашему корневому файлу активности известный идентификатор, например "@+ id/activityRoot", подключить GlobalLayoutListener к ViewTreeObserver и оттуда рассчитать разницу между вашим профилем вида деятельности и размером окна
final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (heightDiff > 100) {
recyclerView.smoothScrollToPosition(myAdapter.getItemCount() - 1);
}
}
});
Легко!
Ответ 4
recyclerView.scrollToPosition(getAdapter().getItemCount()-1);
Ответ 5
У меня также была такая же проблема. Но следующий код мне помогает. Надеюсь, это полезно.
В этом staus есть arraylist.
recyclerView.scrollToPosition(staus.size()-1);
следующий: -
В этом разделе вы можете использовать класс адаптера
recyclerView.scrollToPosition(showAdapter.getItemCount()-1);