我有 Fragment,它使用 RecyclerView Adapter
和 LoaderManager
列出项目。 RecyclerView
我用的是这个 address.我在 Fragment 中实现了 LoaderManager
并将其 Activity 的上下文提供给 RecyclerView
。
当我将新项目添加到列表时,它不会刷新并在列表中显示新项目。我在另一个 Activity 中使用相同的 Adapter
和结构,效果很好。但是在这里我在 Fragment 中使用 RecyclerView
和 Loader
并且当我添加项目时它不会刷新列表,而是我必须返回(完成 fragment )并再次输入。
我有 2 个表,例如 this .首先,我从 student_course
表中获取 cursor
,然后从该 cursor
中获取特定类(class)的学生 ID。然后使用第一个 cursor
的数据,我从 students
表中得到第二个 cursor
,该表包含来自同一类(class)的学生列表。然后我将第二个 cursor
发送到 adapter
。我在 onCreateView()
和 onCreateLoader
上执行以下操作:
String[] projection0 = {
DatabaseOpenHelper.COL_STUDENT_ID,
DatabaseOpenHelper.COL_COURSE_ID};
String selection0=DatabaseOpenHelper.COL_COURSE_ID + "=?";
String selectionArgs0[]={String.valueOf(courseId)};
mDataset0=getActivity().getContentResolver().query(StudentContentProvider.CONTENT_URI2, projection0,selection0,selectionArgs0,null);
if(mDataset0.getCount()!=0) {
//BATCH
List<String> selectionList = new ArrayList<String>();
mDataset0.moveToFirst();
...
String[] projection1 = {
DatabaseOpenHelper.COLUMN_ID,
DatabaseOpenHelper.COL_STUDENT_NUMBER,
DatabaseOpenHelper.COL_STUDENT_NAME,
DatabaseOpenHelper.COL_STUDENT_CARD_ID,
DatabaseOpenHelper.COL_STUDENT_COLOR};
selection1 = selection1.substring(0, selection1.length() - 2) + ")";
mDataset1 = getActivity().getContentResolver().query(StudentContentProvider.CONTENT_URI1, projection1, selection1, selectionArgs1, null);
}else{
mDataset1=null;
}
...
mAdapter = new studentListAdapter(getActivity(),mDataset1,this);
mDataset1是同类同学。
1) 可能是什么问题? 2)里面有没有办法实现LoaderManager类
更新 1: 当我将 selection1
和 selectionArgs1
更改为 null
时,它会更新列表我添加项目后立即。但它显示了每个类(class)的所有学生,因为我没有指定选择。
更新 2: 当我检查 onLoadFinished()
时,我看到新光标在加载新内容后仍然与旧光标相同。
最佳答案
1) 我意识到添加新数据时游标没有改变,所以当我添加新数据时我调用 getLoaderManager().restartLoader(LOADER_ID,null,this)
(在我的例子中是通过 localBrodCastManager
)重新加载光标(调用 onCreateLoader()
)并且新数据显示在列表中。 (如建议 here )。这确实有技巧。
2) 我发现添加项目时 cursor
没有改变的原因,因为在 onCreateLoader()
我返回具有特定 id
选择的学生的 cursor
,这意味着 cursor
不会更改,直到具有特定 ids< 的项目发生更改
我已经给了。因此,如果添加了新项目,我的 cursor
不会更改,但如果其中一项(列出的)被删除或更改,则光标会更改。解决方案是 here .
关于Fragment 中的 Android RecyclerView 未更新加载程序内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29168805/