android - 将 PagedListAdapter 与 LiveData 一起使用时如何显示空 View ?

标签 android android-room android-livedata

通常在 RecyclerView 上,当 RecyclerView 上没有项目时,我会显示一个空 View ,因为我控制对 RecyclerView 的所有更新通过 notify 方法,这非常简单,但是使用 PagedListAdapter 更新似乎只是在后台发生,那么我如何隐藏或显示我的空 View ?

例如,如果我在 Room DB 上调用 deleteItem()PagedListAdapter 将自行更新,而无需我调用 notifyItemDeleted 但如果它是列表中的最后一项,我的代码如何知道显示空 View ?每次发生计数操作时我都可以查询数据库,但这似乎很浪费。有更好的办法吗?

最佳答案

正如评论中提到的,您可以在用于 .submitList() 的同一个 LiveData 观察器中测试列表的空性。

Java 示例:

我假设您正在关注类似于 this snippet 的内容在 PagedListAdapter 文档中找到。我只是向该示例代码添加空检查。

class MyActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
        RecyclerView recyclerView = findViewById(R.id.user_list);
        UserAdapter<User> adapter = new UserAdapter();
        viewModel.usersList.observe(this, pagedList -> {
            // Check if the list is empty
            updateView(pagedList.size());
            adapter.submitList(pagedList));

            pagedList.addWeakCallback(null, new PagedList.Callback() {

                @Override
                public void onChanged(int position, int count) {
                    updateView(pagedList.size())
                    // updateView(adapter.getItemCount())
                }

                ...
            }
        }
        recyclerView.setAdapter(adapter);
    }

    private void updateView(int itemCount) {
        if (itemCount > 0) {
            // The list is not empty. Show the recycler view.
            recyclerView.setVisibility(View.VISIBLE);
            emptyView.setVisibility(View.GONE);
        } else {
            // The list is empty. Show the empty list view
            recyclerView.setVisibility(View.GONE);
            emptyView.setVisibility(View.VISIBLE);
        }

    }
}

Kotlin 示例:

上面的 Java 示例实际上只是我在 Android Paging codelab 中找到的 Kotlin 示例的 Java 翻译。 .

关于android - 将 PagedListAdapter 与 LiveData 一起使用时如何显示空 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56382936/

相关文章:

android - 如何更新 RecyclerView 项目内的绑定(bind)?

java - 为什么 LiveData List 中的值更改时不调用 onChanged?

java - 找不到错误 : cannot access AnimatedImage class file for com. facebook.imagepipeline.animated.base.AnimatedImage

java - Android map 注释上的按钮

Android Studio 不允许我导入 SDK

android - 房间 : how to check whether row exists

android - 房间选择表达式

android - 为房间数据库创建类型转换器时出现问题

android - onAnimationEnd 没有被调用以进行 imageview 旋转动画

android - LiveData 与 StateFlow : Should we switch from Live data to State Flow?