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

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


当前回答

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

我做了一个私有方法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;}

    }

其他回答

1)创建什么都不做的ViewHolder:)

// SampleHolder.java
public class SampleHolder extends RecyclerView.ViewHolder {
    public SampleHolder(View itemView) {
        super(itemView);
    }
}

2)再次创建RecyclerView,不做任何事情:)

// SampleRecycler.java
public class SampleRecycler extends RecyclerView.Adapter<SampleHolder> {
    @Override
    public SampleHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(SampleHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 0;
    }
}

3)现在,当你真正的回收器还没有准备好时,就使用下面的样品。

RecyclerView myRecycler = (RecyclerView) findViewById(R.id.recycler_id);
myRecycler.setLayoutManager(new LinearLayoutManager(this));
myRecycler.setAdapter(new SampleRecycler());

虽然这不是最好的解决方案,但它确实有效!希望这对你有帮助。

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

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

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

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

这对我很管用。

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

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

检查是否错过了在适配器中调用此方法

@Override
public int getItemCount() {
    return list.size();
}

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