問題タブ [android-paging-3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
6 に答える
2287 参照

android - ページング 3 - PagingDataAdapter の更新が完了し、DiffUtil の差分が完了した後に RecyclerView の上部にスクロールする方法は?

ネットワークから新しいデータをフェッチしながら、キャッシュされたデータを表示する RemoteMediator で Paging 3 を使用しています。PagingDataAdapter(呼び出して)リフレッシュrefresh()すると、リフレッシュが完了した後に RecyclerView が一番上までスクロールするようになります。コードラボではloadStateFlow、次の方法でこれを処理しようとしています。

これは確かに上にスクロールしますが、DiffUtil が終了する前です。これは、実際に新しいデータが一番上に挿入された場合、RecyclerView が上にスクロールしないことを意味します。

RecyclerView アダプターには、AdapterDataObserverDiffUtil が差分処理を終了したときに通知を受け取ることができるコールバックがあることを知っています。PREPENDただし、これにより、アダプターの読み込み状態とのあらゆる種類の競合状態がAPPEND発生し、DiffUtil も実行されます (ただし、ここでは一番上までスクロールしたくありません)。

機能する解決策の 1 つは、 に渡しPagingData.empty()PagingDataAdapter同じクエリを再実行することです (が空になり、更新するものが何もないrefreshため、呼び出すだけでは機能しませPagingDataん) が、更新がわかるまで古いデータを表示したままにしておくことをお勧めします。実際に成功しました。