刚刚在我的代码中实现了RecyclerView,取代了ListView。

一切都很好。显示数据。

但是错误消息正在被记录:

15:25:53.476 E/RecyclerView: No adapter attached; skipping layout

15:25:53.655 E/RecyclerView: No adapter attached; skipping layout

对于以下代码:

ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

正如您所看到的,我已经为RecyclerView附加了一个适配器。 为什么我总是得到这个错误呢?

我读过与这个问题相关的其他问题,但没有一个有用。


当前回答

这些行必须在OnCreate中:

mmAdapter = new Adapter(msgList);
mrecyclerView.setAdapter(mmAdapter);

其他回答

对于那些在片段中使用RecyclerView并从其他视图中扩展它的人:当扩展整个片段视图时,确保将RecyclerView绑定到它的根视图。

我为适配器正确地连接和做了所有事情,但我从未进行绑定。 @Prateek Agarwal的回答已经为我提供了一切,但这里有更详细的说明。

科特林

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {

    val rootView =  inflater?.inflate(R.layout.fragment_layout, container, false)
    recyclerView = rootView?.findViewById(R.id.recycler_view_id)
    // rest of my stuff
    recyclerView?.setHasFixedSize(true)
    recyclerView?.layoutManager = viewManager
    recyclerView?.adapter = viewAdapter
    // return the root view
    return rootView
}

Java

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView= inflater.inflate(R.layout.fragment_layout,container,false);
    recyclerview= rootView.findViewById(R.id.recycler_view_id);
    return rootView;
}

我已经解决了这个错误。你只需要添加布局管理器 并添加空适配器。

像这样的代码:

myRecyclerView.setLayoutManager(...//your layout manager);
        myRecyclerView.setAdapter(new RecyclerView.Adapter() {
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                return null;
            }

            @Override
            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

            }

            @Override
            public int getItemCount() {
                return 0;
            }
        });
//other code's 
// and for change you can use if(mrecyclerview.getadapter != speacialadapter){
//replice your adapter
//}

这是一个很简单的错误,不需要做任何代码。 此错误是由于活动使用了错误的布局文件。通过IDE,我自动创建了一个布局v21的布局,成为活动的默认布局。 我在旧布局文件和新文件中所做的所有代码只有少数xml代码,这导致了这个错误。

解决方案:复制旧布局的所有代码,并粘贴在布局v 21

在我的例子中,我在模拟器中设置onLocationChanged()回调和调试适配器。因为它没有检测到位置变化,所以没有开火。当我在模拟器的扩展控件中手动设置它们时,它按预期工作。

首先初始化适配器

public void initializeComments(){
    comments = new ArrayList<>();

    comments_myRecyclerView = (RecyclerView) findViewById(R.id.comments_recycler);
    comments_mLayoutManager = new LinearLayoutManager(myContext);
    comments_myRecyclerView.setLayoutManager(comments_mLayoutManager);

    updateComments();
    getCommentsData();

}

public void updateComments(){

    comments_mAdapter = new CommentsAdapter(comments, myContext);
    comments_myRecyclerView.setAdapter(comments_mAdapter);
}

当数据集中发生变化时,只需调用updateComments方法。