2017-03-07 10 views
0

私はrecyclerViewの問題を解決するために数日間働いています。 これは非常に「高い」レベルの質問であるため、詳細は記載しません。RecyclerViewはトランジションとアイテムアニメータの非互換性を共有しましたか?

私はRecyclerViewに特定の順序のアイテムと、アイテムの内容を編集できるDetailアクティビティを持っています。 呼び出し元アクティビティのRecyclerView内のアイテムの順序を変更できるように内容が変更されることがあります。

私は、詳細アクティビティとの間で共有アイテムの移行を行っています。 問題は、アイテムの順序に影響を与える変更を行ったとき、RecyclerViewアイテムへの共有遷移は、常に新しいアイテムではなく、前のアイテムの位置に移動することです。

要するに、アクティビティの再入力で入力トランジションを延期し、アダプタデータオブザーバを使用してデータが変更されていない場合は「待機」し、新しいアイテムの位置を決定し、その位置までスクロールし、延期された入力トランジションを開始します。

すべてのログをデバッグすると、onMapSharedElementsとonCaptureSharedElementSnapshotでも、すべてがうまくいくはずですが、そうではありません。その結果、共有アイテムは以前の位置にアニメートされ、新しいアイテムにジャンプします。

しかし、これを解決する方法を見つけたので、Detailを呼び出して開始延期遷移後に再び有効にすると、RecyclerViewのアイテムアニメーターが無効になります。アイテムのアニメーターは、共有遷移で何かを偽造/干渉しているようです。

質問は、これを解決する正しい方法は何ですか?

答えて

0

この場合、startActivityForResultと結果コードを使用し、onActivityReenterを使用する方法があります。

onActivityReenterを呼び出すと、移行を延期してアイテムを並べ替えることができ、共有ビューを新しい位置に戻すことができます。

ここには、example available for this use caseが実装されています。

関連する問題