刚刚在我的代码中实现了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附加了一个适配器。 为什么我总是得到这个错误呢?

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


当前回答

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

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

其他回答

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

 override fun onCreateView(...  ): View? 
   {
        val rootview = inflater.inflate(R.layout.fragment_menu, 
        container,false)

        val recycler_menu_list = 
         rootview.findViewById(R.id.recycler_menu_list) as RecyclerView

        recycler_menu_list.layoutManager = LinearLayoutManager(activity)

        val data =  ...

        foodCardAdapter = FoodCardAdapter()

        recycler_menu_list.adapter=foodCardAdapter

        foodCardAdapter.submitList(data)      

       //make sure that the return view is one declared above up and is 
       //not the default 'inflater.inflate(R.layout.fragment_menu,         
       //container,false)' created by the ide

        return rootview    
    }

在我的情况下,它是一个被遗忘的组件,位于ViewHolder类,但它不在布局文件中

这个问题是因为您没有为您的RecyclerView添加任何LayoutManager。

另一个原因是因为你在NonUIThread中调用了这个代码。确保在UIThread中调用这个调用。

解决方案是你必须在UI线程中setAdapter之前为RecyclerView添加一个LayoutManager。

recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

首先初始化适配器

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方法。