2016-05-16 9 views
2

私はアイテムのリストを持っています。これらの項目は日付でソートされます。ユーザーがアプリケーションを開いたときに、前の日付のアイテム(「古いアイテム」)は表示されてはいけませんが、ユーザーはリストをスクロールして表示する必要があります。RecyclerViewとLinearLayoutManagerでアイテム数に関係なく一番上のアイテムを表示するには?

私は、将来日付(「新しい」項目)の最初の項目のpositionを見つけ、recyclerView.scrollToPosition(position)を呼び出します。

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

これは、リストに多数の「新しい」項目がある場合に機能します。

しかし、アイテムが少なすぎる場合(たとえば、「古い」と「新しい」のいずれか)、これらのメソッドは機能しません。

リスト内のアイテムの数にかかわらず、このアイテムを上に配置するために、リストをプログラムによって任意の位置のアイテムにスクロールできますか?

+0

このアダプターを試してください.notifydatasetchanged(); recyclerView.scrollToPosition(position)を呼び出す前に – IMRAN

+0

'recyclerView.scrollToPosition()'を呼び出すと、 'adapter'は既にアイテムで初期化され、' recyclerView'にバインドされています。それ以前にも 'adapter.notifyDataSetChanged()'が呼ばれています。 – mixel

答えて

2

最初に、RecyclerViewに将来のイベントのみを持つデータセットを指定します。

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

注:

  1. あなたはRecyclerViewonTouchListnerを設定するあなたは、タッチイベント[onTouchEvent() should return false]を吸収しない ことを確認してください。

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

関連する問題