如何使用反向回收视图使Paging库工作?

时间:2018-05-16 13:40:52

标签: java android android-recyclerview chat

如何使用最新的分页和无休止的反向回收查看来进行聊天?

我有线性布局,反向布局为真:

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);

和内部滚动侦听器:

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);
    int visibleItemCount = layoutManager.getChildCount();
    int totalItemCount = layoutManager.getItemCount();
    int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();

    if (!isLoading && !isLastPage) {
        if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount
                && firstVisibleItemPosition >= 0
                && totalItemCount >= PAGE_SIZE) {
            loadMoreItems();
        }
    }
}

获取消息的查询:

SELECT * FROM Message WHERE chatId = :chatId ORDER BY dbId ASC

用于下面的房间;

@Query("SELECT * FROM Message WHERE chatId = :chatId ORDER BY dbId ASC")
DataSource.Factory<Integer,Message> fetchAll(String chatId);

问题是如果我在查询中使用ASC,列表会自动滚动并获取其他消息。如果使用DESC,则消息列表不按顺序排列。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

我认为这是永恒的

  

layoutManager.setStackFromEnd(false);


  

layoutManager.setReverseLayout(true);

如果房间数据库中有一个增量列表(在索引/索引行中),则可以在DESC模式下对它进行排序

答案 1 :(得分:0)

可能已经晚了,但是是的,我也正在制作一个聊天应用程序,该聊天应该在底部打开,并且该人员可以向上滚动以查看旧消息。我已经使用会议室DB存储聊天消息,并使用了分页库进行分页。要实现此功能,您只需使用

`app:reverseLayout="true"`

并通过以下命令使用room数据源工厂来获取数据-

    @Query("SELECT * from table_name ORDER BY timestamp DESC")

在此按desc排序非常重要。 时间戳是数据库表中的字段。 而且您不需要带有分页库的滚动侦听器。它会自动处理滚动侦听器。 有关整个项目,请参考此-https://bitbucket.org/raghavsharma29/chatbotmvvm/src/dev/