我在数据库中有一些表,每个表都有很多行,我想在列表中显示表的数据,所以我使用RecyclerView来显示数据,还有一个微调器来选择表我想表现出来。
但现在,当我选择一个微调器项时,RecyclerView没有任何变化,只有在我重新打开片段后它才能显示新数据。
我的代码:
1。removeItem
正常工作
在调用removeItem
时,将删除RecyclerView中的项目。
public void removeItem(WordCls wordCls) {
int position = wordsList.indexOf(wordCls);
wordsList.remove(position);
notifyItemRemoved(position);
}
2. updateList
无效
但是当调用updateList
时,视图中没有任何内容发生
public void updateList(List<WordCls> wordsList) {
//this.wordsList = wordsList;
this.wordsList.clear();
this.wordsList.addAll(wordsList);
notifyDataSetChanged();
}
onCreateView()
中的:
recyclerView = (RecyclerView) view.findViewById(R.id.wordbook_recycler_list);
recyclerView.setLayoutManager(new LinearLayoutManager(activity));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setHasFixedSize(true);
wordsList = WordsManager.getWordsList(tableName);
wordCardAdapter = new WordCardAdapter(activity, tableName, wordsList);
recyclerView.setAdapter(wordCardAdapter);
wordCardAdapter.setOnItemClickListener(new WordCardAdapter.OnRecyclerViewItemClickListener() {
@Override
public void onItemClick(View view, WordCls wordCls) {
Toast.makeText(getActivity(), wordCls.getWord(), Toast.LENGTH_SHORT).show();
wordCardAdapter.removeItem(wordCls);
WordsManager.deleteWord(tableName, wordCls.getWord());
}
});
SpinnerItemSelectedListener
中的:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,long id) {
tableName= parent.getItemAtPosition(position).toString();
prefEditorSettings.putInt(KEY_SPINNER_SELECTED_ITEM, position);
prefEditorSettings.commit();
tableName = getWordbookList().get(spnSelectedPosition);
wordsList = WordsManager.getWordsList(tableName);
wordCardAdapter.updateList(wordsList);
Toast.makeText(activity, tableName, 2000).show();
}
============================================== <登记/> 更新:
方法updateList
是对的。
只是我不小心在
传递了一个错误的参数tableName = getWordbookList().get(spnSelectedPosition);
应该是
tableName = getWordbookList().get(position);
现在,它有效。
答案 0 :(得分:1)
实际上,我不知道RecyclerView是否是实现目标的最佳方式。 当您必须以列表方式显示列表的多个实例时,将使用RecyclerView:)
如果您只有一个要更新的视图(包含要更新的多个字段),我会选择一些数据绑定库,如RoboBinding或新的测试版google binding library(MVVM范例) )
我不打算进一步了解细节,因为我只是想提醒您关于MVVM编程范例,在您的案例中这可能是一个有价值的解决方案。
答案 1 :(得分:0)
而不是wordCardAdapter.updateList(wordsList)
,将新数据添加到词汇表中的wordsList和wordCardAdapter.notifyDataSetChanged()