【发布时间】:2015-03-21 09:48:04
【问题描述】:
我使用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 并在onBindViewHolder() 中过滤IDs 吗?
【问题讨论】:
-
您需要一个“通知”自定义内容提供程序,请参阅实现内容提供程序时的 ContentResolver.notifyChange() 用法
-
@pskink 是的,我有,它会通知,但我的光标没有改变,因为我在光标中限制了
IDs。如果仅更改特定项目而不是添加新项目时,则更改光标。 -
所以在插入新行时也要调用 notifyChange...
-
@pskink 它被调用,问题是
cursor没有列出所有项目,所以它不会更改列表,除非我再次在选择中添加新的IDs。因为cursor即使收到通知也不知道有新项目,因为我用一些IDs限制了cursor
标签: android android-cursorloader android-loader android-recyclerview android-database