Android ViewModel 和 Paging 3 库

Android ViewModel and Paging 3 Library

我正在构建一个聊天应用程序,其中每个数据都首先进入房间数据库,并且在数据插入时,recyclerview 会使用新数据进行更新。它按预期工作,但现在我需要将我的分页库更新到版本 3。为此,我需要更新这些更改 根据 this link and this

我已经进行了所有更改,但我仍然停留在 viewmodel class。我没有得到我需要在此 class 中进行哪些更改以使其与 paging library version 3

一起使用

这是我的 ViewModel

public class Chat_ViewModel extends ViewModel {

    public final LiveData<PagedList<ChatEntity_TableColums>> chatList;


    public Chat_ViewModel() {
        chatList = new LivePagedListBuilder<>(
                RoomDatabase.getInstance(MyApplication.getmContext(),1).chatDAO().getPaginationChat(String.valueOf(UserID())),20).build();
}

    }

在上面的 class 中,我知道 PagedListLivePagedListBuilder 已被弃用,但在这里我不确定要在更新的库中替换什么以使其完美运行。

我的房间数据库查询

@Query("SELECT * FROM tapChatter WHERE userName = :UserName ORDER BY ID DESC")
    PagingSource<Integer, ChatEntity_TableColums>  getPaginationChat(String UserName);

面临的问题:

1:如何更新 ViewModel 以获得聊天应用程序的最佳性能?我目前的 ViewModel 是否适合聊天应用程序?

2: 是否可以在房间数据库数据更新时更新 RecyclerView UI?

我成功地从 Paging 2 迁移到 Paging 3,并且在 ViewModelRoom Database 的帮助下,与 Paging 2 库相比,它确实非常流畅。很难为 java 用户找到很多 documentation/tutorial,所以最后我找到了这些链接以成功迁移。 Link 1

这些是我在 ViewHolderFragment 中为分页所做的更改

在 ViewModel 中创建实时数据

  public final LiveData<PagingData<ChatEntity_TableColums>> chatList;

public Chat_ViewModel() {
    Pager<Integer, ChatEntity_TableColums> pager = new Pager(
            // Create new paging config
            new PagingConfig(20, //  Count of items in one page
                    20, //  Number of items to prefetch
                    false, // Enable placeholders for data which is not yet loaded
                    20, // initialLoadSize - Count of items to be loaded initially
                    200),// maxSize - Count of total items to be shown in recyclerview
            () ->                 RoomDatabase.getInstance(MyApplication.getmContext(),1).chatDAO().getPaginationChat(UserID));
    );

    CoroutineScope coroutineScope = ViewModelKt.getViewModelScope(this);
    chatList = PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager),coroutineScope);

}

片段

 viewModel = new ViewModelProvider(this).get(Chat_ViewModel.class);

        viewModel.chatList.observe(getViewLifecycleOwner(), new Observer<PagingData<ChatEntity_TableColums>>() {
            @Override
            public void onChanged(PagingData<ChatEntity_TableColums> chatEntity_tableColumsPagingData) {
                adapter.submitData(getLifecycle(),chatEntity_tableColumsPagingData);
            }
        });