web-dev-qa-db-fra.com

Comment faire défiler correctement après l'élément inséré dans PagedListAdapter

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()
13
Nick Mowen

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)
            }
        }
    })
22
Nick Mowen