刚刚在我的代码中实现了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之前
private ArtistArrayAdapter adapter;
private RecyclerView recyclerView;
把它们放在Oncreate中
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new ArtistArrayAdapter( artists , R.layout.list_item ,getApplicationContext());
recyclerView.setAdapter(adapter);
当你收到数据时放
adapter = new ArtistArrayAdapter( artists , R.layout.list_item ,getApplicationContext());
recyclerView.setAdapter(adapter);
现在进入ArtistArrayAdapter类,执行这个操作它会做的是如果数组为空或为空它会让GetItemCount返回0如果不是它会让它成为艺术家数组的大小
@Override
public int getItemCount() {
int a ;
if(artists != null && !artists.isEmpty()) {
a = artists.size();
}
else {
a = 0;
}
return a;
}
我因为这个问题失去了16分钟的生命,所以我要承认这个令人难以置信的尴尬的错误,我正在使用Butterknife,我在这个片段中绑定onCreateView中的视图。
花了很长时间才弄清楚为什么我没有布局管理器-但显然,视图是注入的,所以它们实际上不会为空,所以回收器永远不会为空。哎呀!
@BindView(R.id.recycler_view)
RecyclerView recyclerView;
@Override
public View onCreateView(......) {
View v = ...;
ButterKnife.bind(this, v);
setUpRecycler()
}
public void setUpRecycler(Data data)
if (recyclerView == null) {
/*very silly because this will never happen*/
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
//more setup
//...
}
recyclerView.setAdapter(new XAdapter(data));
}
如果你遇到这样的问题,跟踪你的视图,使用uiautomatorviewer之类的东西
我遇到了同样的问题,并意识到我在从源检索数据后同时设置了LayoutManager和适配器,而不是在onCreate方法中设置这两个。
salesAdapter = new SalesAdapter(this,ordersList);
salesView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
salesView.setAdapter(salesAdapter);
然后将数据更改通知适配器
//get the Orders
Orders orders;
JSONArray ordersArray = jObj.getJSONArray("orders");
for (int i = 0; i < ordersArray.length() ; i++) {
JSONObject orderItem = ordersArray.getJSONObject(i);
//populate the Order model
orders = new Orders(
orderItem.getString("order_id"),
orderItem.getString("customer"),
orderItem.getString("date_added"),
orderItem.getString("total"));
ordersList.add(i,orders);
salesAdapter.notifyDataSetChanged();
}