通常在 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/