1

最新のupdate to RecyclerViewでは、NestedScrollView内でwrap_contentを使用できるようになりました。しかし、私と一緒にうまく座っていない行動があり、答えを探しています。ItemTouchHelperを使用してNestedScrollViewにネストする最新のRecyclerView

問題1:ラッピングは空白を考慮しません。ここに描かれているように、ドラッグアニメーションはアイテム半ば画面をクリップしますRecyclerViewコンテンツの後に空のスペースがある場合、これが意味:

enter image description here

UPDATE:解決済みの問題1.私だけlayout_weightを追加する必要= "1"属性をRecyclerViewに追加します。

問題2:アイテムを削除するとき問題ものと同様、RecyclerViewは、アニメーションの開始時にすぐにラップする - ここに示されているようにクリップするアニメーションを引き起こす:

enter image description here

更新:問題2はまだ解決されていませんが、以前と同じように顕著ではありません。アイテムが削除されると、アイテムはビューポートにクリップされ、ビューポートの下からアニメーションが引き上げられて新しい高さにジャンプするように見えます。

問題3:新しい項目を追加するときに、ScrollViewの最後までスクロールします。しかし、私の追加イベントで次のコードを実行すると、スクロールはすぐにスクロールビューの現在の端にジャンプします。 「アイテムが挿入された後」のコールバックはありますか?

public void addItem(T item) { 
    items.add(item); 
    notifyItemInserted(items.size() - 1); 
    scroll.fullScroll(View.FOCUS_DOWN) 
} 

enter image description here

UPDATE:問題3はまだ解決していないが、私はこのような順序を逆に回避策が見つかりました:新しい項目を追加するとき

layoutManager.setReverseLayout(true); 
layoutManager.setStackFromEnd(true); 

そして、以下のコードを。このように、スクロールは常に高さにかかわらず動作します。

nestedScrollView.fullScroll(View.FOCUS_UP); 

記事が引用された:

注意をRecyclerViewはその 子供をアニメーション化しますが、それは自身の境界の変更をアニメーション化しないこと。 が変更されたときにRecyclerViewの境界をアニメートするようにする場合は、 Transition APIを使用できます。

私は境界線をアニメーション化する必要はありませんが、スナップしてビューポートを埋める必要があります(リサイクラビューの上に静的ビューがあるのでこの場合match_parentは使用できません)。 )。従って、問題1を解決する。

境界が変更される前に何かしたいと思います。例:アイテムを削除すると、削除がアニメートされ、バインドされた変更が適用されます。従って、問題2を解決する。

逆に、境界が既に変更されている場合、いくつかのことを行いたいと思います。例:新しい項目を追加するには、最初に新しい境界を適用してから、スクロールアニメーションを開始します。従って、問題3を解決する。

どのように私はこれを達成することができますか?

答えて

0

私がやりたいことに対して、より良い解決策を見つけました。新しいLinearLayoutManagerがコンテンツをどのようにラップするかを理解するよりも簡単です。

代わりにこれを持つの:

<NestScrollView> 
    <LinearLayout> 
    <View></View> 
    <View></View> 
    <RecyclerView></RecyclerView> 
    </LinearLayout> 
</NestScrollView> 

は、私は一人だけのリサイクルで行き、RecyclerView自体の内部ヘッダを管理:

<FrameLayout> 
    <RecyclerView></RecyclerView> 
</FrameLayout> 

それだそんなに簡単に私は置くことができるようになりまし管理することアイテムの上または下のビュー。

ここでこのソリューションを使用:Link

関連する問題