14

私は実験してきましたがPagedListAdapter、アダプターの位置を正しく復元する方法がわかりません。

最後の試行はlastKey、現在のリストから保存しようとしました。

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)

    val lastKey = adapter.currentList?.lastKey as Int

    outState.putInt("lastKey", lastKey)
}

しかし、アダプターを復元して、最後に見たものと表示されているものに渡すlastKeyPagedListBuilder、かなり異なります。

    val dataSourceFactory = dao.reportsDataSourceFactory()
    val builder = RxPagedListBuilder(
        dataSourceFactory,
        PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setInitialLoadSizeHint(60)
            .setPageSize(20)
            .setPrefetchDistance(60)
            .build()
    )
        .setInitialLoadKey(initialLoadKey)
        .setBoundaryCallback(boundaryCallback)

再開時にページ #4 の途中にいる場合、アダプターはページ #4 の先頭の位置になります。理想的には、アダプターは最後に見たときとまったく同じ位置に復元する必要があります。

LayoutManager の状態を保存するためのさまざまな試み

outState.putParcelable("layout_manager_state", recycler_view.layoutManager.onSaveInstanceState()) 

そして、それを復元します

recycler_view.layoutManager.onRestoreInstanceState(it.getParcelable("layout_manager_state"))

見事に失敗。どんな提案も大歓迎です:)

4

1 に答える 1