J'utilise la classe Android Arch PagedListAdapter
. Le problème que j'ai rencontré est que, puisque mon application est une application de style chat, je dois faire défiler jusqu'à la position 0 lorsqu'un élément est inséré. Mais le PagedListAdapter trouve les différences et appelle les méthodes nécessaires sur le thread d'arrière-plan, il semble donc qu'il n'y ait aucun moyen fiable d'appeler layoutManager.scrollToPosition(0)
Si quelqu'un a des idées sur la façon de faire défiler au bon moment, ce serait grandement apprécié. Merci!
Voici ma chambre Dao:
@Dao
abstract class MessagesDao {
@Query("SELECT ...")
abstract fun getConversation(threadId: String): DataSource.Factory<Int, Conversation>
}
puis le LivePagedListBuilder:
LivePagedListBuilder(database.messagesDao.getConversation(threadId), PagedList.Config.Builder()
.setInitialLoadSizeHint(20)
.setPageSize(12)
.setEnablePlaceholders(true)
.build()).build()
Il s'avère qu'il y a cette belle chose appelée AdapterDataObserver qui vous permet d'observer les appels aux éléments PagedListAdapter. Voici comment j'ai pu l'utiliser pour résoudre le problème.
conversationAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
if (positionStart == 0) {
manager.scrollToPosition(0)
}
}
})