Как написать реализацию при прокрутке до вершины с использованием recyclerView и PagedListAdapter? - PullRequest
0 голосов
/ 12 апреля 2019

Я использовал компоненты Android Jetpack для разработки своего приложения чата, я хочу добавить поддержку разбиения на страницы на экране журнала чата, потому что получение данных из моего источника данных и рендеринг сообщений в RecyclerView заняло слишком много времени, во всех руководствах рассказывается о нижней пагинациии он хорошо работает с моим другим экраном, как контакт, но я не нашел никакой реализации для верхнего нумерации страниц, и я попытался написать свою реализацию, используя PagedList.BoundaryCallback, но это не сработало.

это мой код:

  @MainThread
    override fun onZeroItemsLoaded() {
        super.onZeroItemsLoaded()
        Log.d(MessageBoundaryCallback::class.java.simpleName, "onZeroItemsLoaded()")
        helper.runIfNotRunning(PagingRequestHelper.RequestType.INITIAL) {
            val db = FirebaseFirestore.getInstance()
            db.collection(Constants.FIRE_STORE_MESSAGES_COLLECTION_NAME)
                    .whereEqualTo(Constants.CHAT_ID, chatId)
                    .orderBy(Constants.MESSAGE_TIME, Query.Direction.DESCENDING)
                    .limit(pageSize)
                    .get().addOnCompleteListener(createMessageCallback(it))
        }
    }

   override fun onItemAtFrontLoaded(itemAtFront: Message) {
        super.onItemAtEndLoaded(itemAtFront)
        Log.d(MessageBoundaryCallback::class.java.simpleName, "onItemAtEndLoaded($itemAtFront: Message)")
        helper.runIfNotRunning(PagingRequestHelper.RequestType.BEFORE) {
            val db = FirebaseFirestore.getInstance()
            db.collection(Constants.FIRE_STORE_MESSAGES_COLLECTION_NAME)
                    .whereEqualTo(Constants.CHAT_ID, chatId)
                    .whereLessThan(Constants.MESSAGE_TIME, itemAtFront.time)
                    .orderBy(Constants.MESSAGE_TIME, Query.Direction.DESCENDING)
                    .limit(pageSize)
                    .get().addOnCompleteListener(createMessageCallback(it))
        }
    }

1 Ответ

0 голосов
/ 19 апреля 2019

Я просто переворачиваю свой менеджер раскладок

layoutManager.reverseLayout = true

И все работает как шарм

...