通常在class EditProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('status', 'website', 'description', 'country', 'user', )
上,当RecyclerView
上没有任何项目时,我会显示一个空视图,并且由于我通过RecyclerView
方法控制着对RecyclerView
的所有更新,因此这非常简单,但是使用notify
更新似乎只是在后台进行,所以如何隐藏或显示空视图?
例如,如果我在PagedListAdapter
上调用deleteItem()
,则Room DB
会自动更新,而无需我调用PagedListAdapter
,但如果它是最后一项列表中,我的代码如何知道显示空视图?每当计数发生操作时,我都可以查询数据库,但这似乎很浪费。有更好的方法吗?
答案 0 :(得分:1)
如评论中所述,您可以在用于LiveData
的同一.submitList()
观察者中测试列表是否为空。
Java示例:
我假设您正在遵循与PagedListAdapter
文档中的this snippet类似的内容。我只是在该示例代码中添加了空度检查。
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
if (pagedList.size() > 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);
}
adapter.submitList(pagedList));
}
recyclerView.setAdapter(adapter);
}
}
Kotlin示例:
上面的Java示例实际上只是我在此Android Paging codelab中找到的Kotlin示例的Java翻译。
答案 1 :(得分:0)
这不是最佳解决方案,但是您可以尝试一下
myViewModel.getMyPagedList().observe(MainActivity.this, items -> {
myPagedListAdapter.submitList(items);
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
if (myPagedListAdapter.getItemCount() == 0) {
runOnUiThread(() -> {
emptyTextView.setText("Empty");
emptyTextView.setVisibility(View.VISIBLE);
});
// The Runnable will be re-executed (repeated) as long as if condition is true
handler.postDelayed(this, 100);
} else
emptyTextView.setVisibility(View.GONE);
}
};
// trigger first time
handler.postDelayed(runnable, 1000);
});