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

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


当前回答

我有这个问题,一些时间的问题是recycleView放在ScrollView对象

检查实施后,原因似乎如下。如果RecyclerView被放到ScrollView中,那么在测量步骤中,它的高度是未指定的(因为ScrollView允许任何高度),结果是,它等于最小高度(根据实现),显然是零。

你有两个选项来解决这个问题:

设置一个高度为RecyclerView 设置滚动视图。fillViewport为true 或者保持RecyclerView在ScrollView之外。在我看来,这是目前为止最好的选择。如果RecyclerView的高度没有限制(当它被放入ScrollView中时就是这种情况),那么所有Adapter的视图在垂直方向上都有足够的位置,并且可以一次性创建。不再有视图回收,这有点破坏了RecyclerView的目的。

(可用于android.support.v4.widget。以及NestedScrollView)

其他回答

你能确保你在延迟异步回调(例如在onCreate()方法内部)之外的“主线程”调用这些语句吗? 只要我从“延迟”方法调用相同的语句。在我的例子中是ResultCallback,我得到了相同的消息。

在我的片段中,从ResultCallback方法中调用下面的代码会产生相同的消息。在将代码移动到我的应用程序中的onConnected()方法后,消息消失了…

LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
list.setLayoutManager(llm);
list.setAdapter( adapter );

这些行必须在OnCreate中:

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

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

像这样的代码:

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
//}

我有这个错误,我试着修复了一段时间,直到我找到解决方案。

我做了一个私有方法buildRecyclerView,我调用它两次,第一次在onCreateView,然后在我的回调(其中我从API获取数据)。这是我的方法buildRecyclerView在我的片段:

private void buildRecyclerView(View v) {
        mRecyclerView = v.findViewById(R.id.recycler_view_loan);
        mLayoutManager = new LinearLayoutManager(getActivity());
        ((LinearLayoutManager) mLayoutManager).setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mAdapter = new LoanAdapter(mExampleList);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);
}

此外,我必须修改我的适配器中的get-Item-Count方法,因为On - On - create - view列表是空的,它通过一个错误。所以,我的get-Item-Count如下所示:

@Override
    public int getItemCount() {
        try {
            return mLoanList.size();
        } catch (Exception ex){return 0;}

    }

这对我很管用。

如果您正在使用模拟器,请执行此操作。

android:usesCleartextTraffic=“true”

如果你的cardviewxml设计是这样的,

android.support.v7.widget.CardView

用android x替换cardviewxml设计。 必须如此;

androidx.cardview.widget.CardView

如果你的recyclerview xml设计是这样的,

android.support.v7.widget.RecyclerView

用android x替换cardviewxml设计。 必须如此;

androidx.recyclerview.widget.RecyclerView