没有连接适配器;使用游标加载器时跳过布局

No adapter attached; skipping layout when using cursor loader

我想用 CursorLoader 返回的游标数据填充 onLoadFinished() 中的 RecyclerView。 RecyclerView 按预期填充, 但我仍然遇到同样的错误 "No adapter attached; skipping layout"

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {

    recyclerViewAdapter = new RecyclerViewAdapter(getApplicationContext(), data);

    //attach Layout Manager to RecyclerView
    recyclerView.setLayoutManager(newLinearLayoutManager(getApplicationContext()));  

    //attach adapter to RecyclerView
    recyclerView.setAdapter(recyclerViewAdapter);

}

无论您何时附加适配器,只要包含的 Activity/Fragment 需要布局,您的 RecyclerView 就需要将自己布局在屏幕上——也就是说,当屏幕是首先显示给用户。

这意味着在您的 CursorLoader 完成加载之前,您的布局可能会显示给用户。为此,RecyclerView 需要查询其适配器以确定要显示的内容。

您应该在首次创建 Activity/Fragment 时设置布局管理器和空适配器,然后在光标完成加载后更新适配器的内容。

创建视图时显示此错误消息。有一个 recyclerview 但没有设置适配器。我建议创建适配器并将其设置为 recyclerview onCreate 或 onCreateView(如果是片段)。然后只需将光标或数据设置到适配器 onLoadFinished 并通知您的适配器数据更改..

或者忽略错误信息..错误信息没有害处;-)

终于在几天后我设法弄清楚了问题...我所做的是在我的 onActivityCreated 中创建我的 RecyclerView 适配器的实例,仅将我的片段的上下文传递给适配器的构造函数并设置适配器到我的 RecyclerView

recyclerViewAdapter = new RecyclerViewAdapter(getActivity());
recyclerView.setAdapter(recyclerViewAdapter);

因此,RecyclerView 框架附加了一个适配器,因此没有布局被跳过。光标数据分别从 CursorLoader 的 onLoadFinished() 和 onLoadReset() 方法传递(交换)到 RecyclerView Adapter

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    recyclerViewAdapter.swapCursor(data);
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
    recyclerViewAdapter.swapCursor(null);
} 

swapCursor 方法已在我的 RecyclerView 适配器中自定义实现 class