1. ホーム
  2. java

[解決済み] RecyclerViewの一番下までスクロールするには? scrollToPositionが機能しない

2022-04-20 01:28:06

質問

アクティビティを読み込んだ後、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)

というのはうまくいきません。の中に30個の要素があります。 GENERIC_MESSAGE_LIST .

解決方法は?

を設定するだけです。 setStackFromEnd=true または setReverseLayout=true で、LLMが末尾から項目をレイアウトするようにします。

この2つの違いは setStackFromEnd は、最後の要素を表示するようにビューを設定しますが、レイアウトの方向は同じままです。(つまり、左から右への水平リサイクラービューでは、最後の要素が表示され、左へスクロールすると、それ以前の要素が表示されます)

一方 setReverseLayout は、 アダプタが追加する要素の順番を変更します。レイアウトは最後の要素から始まり、LTR Recycler View では一番左の要素になります。

サンプルです。

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

参照 ドキュメンテーション をご覧ください。