Подтвердить что ты не робот

Как сохранить RecyclerView всегда прокрутки вниз

Я использую Recyclerview Replace со списком Я хочу, чтобы Recyclerview всегда прокручивал нижнюю часть.

ListView может использовать этот метод setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL)

RecyclerView Я использую метод smoothScrollToPosition(myAdapter.getItemCount() - 1)

но когда Soft клавиатура Pop, ее замените содержимое RecyclerView.

4b9b3361

Ответ 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);