我使用Loader
RecyclerView.Adapter
列出项目。我想列出数据库表中的特定项目。所以我做了:
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String selectionArgs1[]={"1","13","14"};
String selection1 = DatabaseOpenHelper.COLUMN_ID + " in (";
for (int i = 0; i < selectionArgs1.length; i++) {
selection1 += "?, ";
}
selection1 = selection1.substring(0, selection1.length() - 2) + ")";
String[] projection1 =...
return new CursorLoader(getActivity(),StudentContentProvider.CONTENT_URI1, projection1, selection1,selectionArgs1, null);
}
通常我会null,null
给selection
和selectionArgs
,但在这里,我会列出具有特定IDs
的项目。将新项目添加到表格并且我想列出它时会出现问题。我正在返回的cursor
不知道新项目,因为我提供了3个特定项目,因此它只检测这3个项目何时发生变化。
如何列出新项目添加了一些ID
并且我想列出它?我应该将数据库中的所有项目投射到RecyclerView.Adapter
并过滤IDs
中的onBindViewHolder()
吗?
答案 0 :(得分:2)
由于我在IDs
中限制了cursor
,如果仅更改了特定项目,则会更改,而不是在添加新项目时。我在onLoadFinished()
上做了一个技巧来创建新的cursor
并交换新的游标。因此,当有变化时,我再次使用selection
和selectionArgs
获得新光标:
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch (loader.getId()) {
case LOADER_ID:{
String selectionArgs1[]={...};
String selection1 = DatabaseOpenHelper.COLUMN_ID + " in (";
for (int i = 0; i < selectionArgs1.length; i++) {
selection1 += "?, ";
}
selection1 = selection1.substring(0, selection1.length() - 2) + ")";
String[] projection1 =...
mDataset1 = getActivity().getContentResolver().query(StudentContentProvider.CONTENT_URI1, projection1, selection1, selectionArgs1, null);
mAdapter.swapCursor(mDataset1);
break;
}
}