私はAndroid Arch PagedListAdapter
クラスを使用しています。私が遭遇した問題は、私のアプリがチャットスタイルのアプリであるため、アイテムがあるときに0の位置までスクロールする必要があることです。が挿入されます。ただし、PagedListAdapterはdiffを見つけてバックグラウンドスレッドで必要なメソッドを呼び出すため、layoutManager.scrollToPosition(0)
を呼び出す信頼できる方法がないようです
私が適切なタイミングでスクロールする方法について誰かがアイデアを持っているなら、それは大歓迎です。ありがとう!
これが私の部屋ダオです:
@Dao
abstract class MessagesDao {
@Query("SELECT ...")
abstract fun getConversation(threadId: String): DataSource.Factory<Int, Conversation>
}
そして、LivePagedListBuilder:
LivePagedListBuilder(database.messagesDao.getConversation(threadId), PagedList.Config.Builder()
.setInitialLoadSizeHint(20)
.setPageSize(12)
.setEnablePlaceholders(true)
.build()).build()
PagedListAdapterアイテムの呼び出しを観察できる、AdapterDataObseverと呼ばれるこの美しいものがあることがわかります。これが問題を解決するためにどのように使用できたかです。
conversationAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
if (positionStart == 0) {
manager.scrollToPosition(0)
}
}
})