2016-08-03 17 views
0

私はViewHolderアイテムのリストを含むRecyclerViewを持っています。ユーザーがアイテムに触れると、レイアウト/ビューが展開されて詳細が表示されます。ユーザーがリストの最後の項目にスクロールすると、その項目が所定の位置に拡大されて表示されます。言い換えれば、項目が拡大するにつれて、リストの一番下まで伸びるが、リストは、「スクリーン上」または「ビュー内」のすべての展開項目をRecyclerViewの範囲内に維持するために自動スクロールしない。RecyclerViewは拡張されたViewHolderアイテムに自動スクロールしません

リストの最後の位置にRecyclerView.scrollToPosition()を試みましたが、リストは移動しません。

ユーザーリストを手動でスクロールして、完全に展開したアイテムを表示することはできますが、自動的に実行します。

思考?

編集:これが影響を与えるかどうかはわかりませんが、リストは既にリストの一番下まで手動でスクロールされているため、同じ位置にプログラム的にスクロールすると重複しているようです。基本的には、リスト内のスクロール位置を「リフレッシュ」して、最後のリスト項目全体を表示します。

+0

また、LinearLayoutManager.scrollToPosition()メソッドを使用しようとしましたが、同じ結果が得られます。 – alpartis

答えて

2

私はでした。ほぼで、LinearLayoutManagerスクロールメソッドを使用しました。解決策は、私にとって、LinearLayoutManager.scrollToPositionWithOffset()を使用し、拡張ビューの余分なサイズをオフセットとして提供することでした。

int distanceInPixels; 
View firstVisibleChild = recyclerView.getChildAt(0); 
int itemHeight = firstVisibleChild.getHeight(); 
int currentPosition = recyclerView.getChildAdapterPosition(firstVisibleChild); 
int p = Math.abs(position - currentPosition); 
if (p > 5) distanceInPixels = (p - (p - 5)) * itemHeight; 
else  distanceInPixels = p * itemHeight; 
layoutMgr.scrollToPositionWithOffset(position, distanceInPixels); 
+0

こんにちは、例を共有していただけますか?私はこの問題に関して6〜7時間を無駄にしました。 –

0

recyclerView.scrollToPosition()メソッド内の位置引数として "max_size - 1"を使用してみてください。 max_sizeはリスト内の項目の数です。

+0

元の投稿で述べたように、リストの最後の位置、つまり.scrollToPosition(max_size - 1)までスクロールしようとしました。ちなみに、私はまた、あなたの用語を使って、リストの末尾、すなわち.scrollToPosition(max_size)の1つのインデックスをスクロールしようとしました。 – alpartis

+0

それは実際に私のために働く。どうやら、実際にアダプタの実際の限界に行くためにスクロールを超過することはできません...ありがとう! –

関連する問題