Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView内部片段未更新加载程序内容_Android_Android Fragments_Android Loadermanager_Android Loader_Android Recyclerview - Fatal编程技术网

Android RecyclerView内部片段未更新加载程序内容

Android RecyclerView内部片段未更新加载程序内容,android,android-fragments,android-loadermanager,android-loader,android-recyclerview,Android,Android Fragments,Android Loadermanager,Android Loader,Android Recyclerview,我有一个片段,它使用RecyclerView适配器和LoaderManager来列出项目RecyclerView我使用的就是这个,我在片段中实现了LoaderManager,并将其活动的上下文提供给RecyclerView。 当我向列表中添加新项目时,它不会刷新并在列表中显示新项目。我在另一个活动中使用相同的适配器和结构,效果很好。但在这里,我在片段内部使用RecyclerView和Loader,当我添加项目时,它不会刷新列表,相反,我必须返回(完成片段)并再次输入。 我有两张像这样的桌子。首先

我有一个片段,它使用
RecyclerView适配器
LoaderManager
来列出项目
RecyclerView
我使用的就是这个,我在片段中实现了
LoaderManager
,并将其活动的上下文提供给
RecyclerView
。 当我向列表中添加新项目时,它不会刷新并在列表中显示新项目。我在另一个活动中使用相同的
适配器
和结构,效果很好。但在这里,我在片段内部使用
RecyclerView
Loader
,当我添加项目时,它不会刷新列表,相反,我必须返回(完成片段)并再次输入。 我有两张像这样的桌子。首先,我从
student\u course
表中获取
cursor
,然后从该
cursor
中获取特定班级的学生ID。然后使用第一个
游标
的数据,我从
学生
表中获得第二个
游标
,该表包含来自同一班级的学生列表。然后我将第二个
光标
发送到
适配器
。我对
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);
String[]projection0={
DatabaseOpenHelper.COL\u学生ID,
DatabaseOpenHelper.COL\u COURSE\u ID};
String selection0=DatabaseOpenHelper.COL_COURSE_ID+“=?”;
String selectionArgs0[]={String.valueOf(courseId)};
mDataset0=getActivity().getContentResolver().query(StudentContentProvider.CONTENT\u URI2,projection0,selection0,selectionArgs0,null);
如果(mDataset0.getCount()!=0){
//批处理
List selectionList=新建ArrayList();
mDataset0.moveToFirst();
...
字符串[]项目1={
DatabaseOpenHelper.COLUMN\u ID,
DatabaseOpenHelper.COL\u学生号,
DatabaseOpenHelper.COL\u学生名称,
DatabaseOpenHelper.COL\u学生卡\u ID,
DatabaseOpenHelper.COL\u STUDENT\u COLOR};
selection1=selection1.substring(0,selection1.length()-2)+“;
mDataset1=getActivity().getContentResolver().query(StudentContentProvider.CONTENT\u URI1,projection1,selection1,selectionArgs1,null);
}否则{
mDataset1=null;
}
...
mAdapter=newstudentlistadapter(getActivity(),mDataset1,this);
mDataset1是同一班级的学生。 1) 有什么问题吗?2) 有没有办法在内部实现LoaderManager类 更新1:当我将
selection1
selectionArgs1
更改为
null
时,它会在我添加项目后立即更新列表。但它显示了每个班级的所有学生,因为我没有指定选择

更新2:当我选中
onLoadFinished()
时,我看到新光标在加载新内容后仍然与旧光标相同

1)我意识到添加新数据时光标不会改变,所以当我添加新数据时,我调用
getLoaderManager().restartLoader(LOADER_ID,null,this)
(在我的例子中由
localBrodCastManager
重新加载光标(调用
onCreateLoader()
),新数据显示在列表中。(如建议的那样)。这真是个骗局。
2)我发现添加项目时,原因
光标
没有改变,因为在
onCreateLoader()
上,我返回了
光标
,带有特定的
id
学生选择,这意味着
cursor
将不会更改,直到具有特定
id
的项目发生更改。因此,如果添加了新项目,则不会更改我的
光标
,但如果删除或更改了其中一个项目(已列出),则光标会更改。解决方案是。

显示一些代码,以便我们能够识别problem@hrskrs补充了一些澄清