android - 使用 ViewModelProviders 时 RecyclerView.Adapter 未达到 onCreateViewHolder?
问题描述
我的 recyclerview 没有达到 onCreateViewHolder 或 getItemCount。我已经检查并确定我的项目计数不为 0,我在适配器中添加了断点,但除了构造函数之外没有调用其他方法。
我看过的问题:
RecyclerView.Adapter:
// I have added only the required methods.
public class JournalAdapter extends RecyclerView.Adapter<JournalAdapter.ViewHolder> {
public JournalAdapter(Context context, List<Map<String, Object>> diaryListMaps) {
this.mInflater = LayoutInflater.from(context);
this.diaryListMaps = diaryListMaps;
Log.d(TAG, "Adapter Size: " + diaryListMaps.size());
Log.d(TAG, String.valueOf(diaryListMaps));
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.jourrnal_card, parent, false);
JournalAdapter.ViewHolder viewHolder = new JournalAdapter.ViewHolder(view);
Log.d(TAG, "onCreateViewHolder");
return viewHolder;
}
@Override
public int getItemCount() {
if (diaryListMaps.size() == 0) {
Log.d(TAG, "getItem: " + 1);
return 1;
}
else {
Log.d(TAG, "getItem: " + 10);
return diaryListMaps.size();
}
}
}
分段:
mViewModel = ViewModelProviders.of(this).get(DiaryDashboardViewModel.class);
mViewModel.getJournals().observe(getViewLifecycleOwner(), journalList -> {
Log.d(TAG, String.valueOf(journalList));
diaryListMaps.addAll(journalList);
journalAdapter = new JournalAdapter(getContext(), diaryListMaps);
});
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
layoutManager.setOrientation(RecyclerView.VERTICAL);
journalRecycler.setHasFixedSize(true);
journalRecycler.setLayoutManager(layoutManager);
journalRecycler.setAdapter(journalAdapter);
获取期刊
public MutableLiveData<List<Map<String, Object>>> getJournals() {
Log.d(TAG, "getJournal");
dailyWeekColRef
.get()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
List<Map<String, Object>> dummyList = new ArrayList<>();
for (QueryDocumentSnapshot documentSnapshot: Objects.requireNonNull(task.getResult())) {
Map<String, Object> dummyMap = documentSnapshot.getData();
Log.d(TAG, "Retrived data " + dummyMap);
dummyList.add(dummyMap);
}
journal.postValue(dummyList);
}
else {
Log.d(TAG, "task unsuccessful " + task);
}
});
return journal;
}
解决方案
请在调用方法new JournalAdapter(getContext(), diaryListMaps);
之前setAdapter
调用,并在您的观察者获得值时通知
mViewModel.getJournals().observe(getViewLifecycleOwner(), journalList -> {
Log.d(TAG, String.valueOf(journalList));
diaryListMaps.clear();
diaryListMaps.addAll(journalList);
journalAdapter.notifyDataSetChanged();
});
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
layoutManager.setOrientation(RecyclerView.VERTICAL);
journalRecycler.setHasFixedSize(true);
journalRecycler.setLayoutManager(layoutManager);
journalAdapter = new JournalAdapter(getContext(), diaryListMaps);
journalRecycler.setAdapter(journalAdapter);
推荐阅读
- r - 使用 R 循环使用多列过滤器
- node.js - 我无法安装 bcrypt
- multiprocessing - DASK python库中的工人定义,为什么工人比cpu核心多
- python - 函数不附加元素 data1 或 data2(python 继承)
- git - 如何以编程方式查找 Git 冲突周围的行号?
- docker-compose - whatsapp业务api给出错误wacore未实例化
- xml - 将 XSL 模板应用于通过键功能选择的元素
- python - 将 Python 列表转换为字典的简单方法
- macos - Azure RM 模块在 MACOSX Catalina 上不起作用
- office-addins - DisplayeDialogAsync 不允许下载 Outlook 加载项文件