Android

How to scroll to the bottom of a RecyclerView? scrollToPosition doesn't work

Как прокрутить до нижней части RecyclerView? scrollToPosition не работает

Я хотел бы прокрутить до конца списка RecyclerView после загрузки действия.

GENERIC_MESSAGE_LIST = (ArrayList) intent.getExtras().getParcelableArrayList(ConversationsAdapter.EXTRA_MESSAGE);
conversationView = (RecyclerView) findViewById(R.id.list_messages);
conversationView.setHasFixedSize(true);
conversationViewLayoutManager = new LinearLayoutManager(this);
conversationView.setLayoutManager(conversationViewLayoutManager);
conversationViewAdapter = new ConversationAdapter(GENERIC_MESSAGE_LIST, this);
conversationView.setAdapter(conversationViewAdapter);

conversationView.scrollTo(...) выдает исключение о том, что оно не поддерживается в RecyclerView, и conversationView.scrollToPosition(...) похоже, ничего не делает.

После приведенного выше блока кода я добавил

conversationView.scrollToPosition(GENERIC_MESSAGE_LIST.size() + 1)

который не работает. В GENERIC_MESSAGE_LIST есть 30 элементов.

Переведено автоматически
Ответ 1

Я просматривал этот пост, чтобы найти ответ, но... Я думаю, что все в этом посте столкнулись с тем же сценарием, что и я: scrollToPosition() был полностью проигнорирован по очевидной причине.

Что я использовал?

recyclerView.scrollToPosition(items.size());

... что СРАБОТАЛО?

recyclerView.scrollToPosition(items.size() - 1);
Ответ 2

Просто установите setStackFromEnd=true или setReverseLayout=true так, чтобы LLM размещал элементы с конца.

Разница между этими двумя заключается в том, что setStackFromEnd установит вид для отображения последнего элемента, направление макета останется прежним. (Таким образом, в горизонтальном представлении Recycler слева направо будет показан последний элемент, а при прокрутке влево будут показаны более ранние элементы)

Тогда как setReverseLayout изменит порядок элементов, добавленных адаптером. Макет начнется с последнего элемента, который будет самым левым в представлении LTR Recycler, а затем при прокрутке вправо будут показаны более ранние элементы.

Пример:

final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setReverseLayout(true);
_listView.setLayoutManager(linearLayoutManager);

Подробности см. в документации.

Ответ 3

Я знаю, что отвечать здесь поздно, но если кто-то хочет знать, решение приведено ниже

conversationView.smoothScrollToPosition(conversationView.getAdapter().getItemCount() - 1);
Ответ 4

Для прокрутки вниз из любой позиции recyclerview до низа

Kotlin

editText.setOnClickListener {
rv.postDelayed({
rv.scrollToPosition(rv.adapter.itemCount - 1)
}, 1000)
}

Java

edittext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rv.postDelayed(new Runnable() {
@Override
public void run() {
rv.scrollToPosition(rv.getAdapter().getItemCount() - 1);
}
}, 1000);
}
});
java android android-recyclerview