2

私はアイテムのリストを持っています。これらの項目は日付順に並べられています。今より前の日付の項目 (「古い」項目) は、ユーザーがアプリケーションを開いたときに表示されるべきではありませんが、ユーザーはリストを上にスクロールすることで表示できるはずです。

position将来の日付を持つ最初のアイテム (「新しい」アイテム)を見つけて、 を呼び出しますrecyclerView.scrollToPosition(position)

私も試しlayoutManager.scrollToPositionWithOffset(position, 0)ました。

これは、リストに多くの「新しい」アイテムがある場合に機能します。

ただし、項目が少なすぎる場合 (たとえば、「古い」アイテムと「新しい」アイテムが 1 つずつ)、これらの方法は機能しません。

リスト内のアイテムの数に関係なく、プログラムでリストを特定の位置のアイテムにスクロールして、このアイテムを一番上に配置するにはどうすればよいですか?

4

1 に答える 1

2

最初にRecyclerView、将来のイベントのみを含むデータセットを に提供します。

上方向へのスクロールを検出するにはonTouchListneronを設定します。recyclerView上向きのスクロールを検出したときに最初のインデックスを返す場合findFirstCompletelyVisibleItemPosition()は、上向きのオーバースクロールを意味します。次に、古いエントリを含めるようにデータ セットを変更します。次に、adapter.notifyDataSetChanged() を使用してアダプターにデータセットの変更を通知すると、リストが再描画されます。

ノート :

  1. onTouchListner設定するときはRecyclerView、タッチイベントを吸収しないようにしてください[onTouchEvent() should return false]

  2. 上向きのオーバースクロールを初めて検出したら、今後のタッチ イベントのためにデータセットを変更する必要がないことを示すフラグを設定できます。

于 2016-05-16T13:18:06.737 に答える