刚刚在我的代码中实现了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附加了一个适配器。
为什么我总是得到这个错误呢?
我读过与这个问题相关的其他问题,但没有一个有用。
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());
虽然这不是最好的解决方案,但它确实有效!希望这对你有帮助。
我得到了同样的问题,我做的每件事都是正确的,除了在xml文件:
step first 1: initialize recyclerview & List & Adaptor:
RecyclerView recyclerview;
List<ModelName> list;
ProvideBidAdaptor adaptor;
step 2: bind it in onCreate-
recyclerview = findByViewId(R.id.providerBidRV);
recyclerview.setLayoutManager(new LinearLayoutManager(this));
recyclerview.setHasFixedSize(true);
list = new ArrayList<>();
step 3: Where you getting response or list - add list- (i am getting from response)>
responseList.addAll(response.getResponse());
adaptor = new ProvideBidAdaptor(this, responseList);
binding.detailsRV.setAdapter(adaptor);
这是我的xml文件,我实现RecyclerView:
我忘记了线性布局的方向,经过这个修正- RecyclerView附加。
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".activities.Bidding.ProvideBid">
<include
android:id="@+id/toolbar"
layout="@layout/app_toolbar"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/providerBidRV"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</layout>
这是适配器:
public class ProvideBidAdaptor extends RecyclerView.Adapter<ProvideBidAdaptor.ViewHolder> {
Context context;
List<Response> responseList;
DateTime dateTimeInstance = new DateTime();
public ProvideBidAdaptor(Context context, List<Response> responseList) {
this.context = context;
this.responseList = responseList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.geo_presence_item_list, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final Response detailsResponse = responseList.get(position);
if (!detailsResponse.getUserId().isEmpty()) {
holder.day.setText(detailsResponse.getDay());
holder.locationType.setText(detailsResponse.getLocationType());
}
}
@Override
public int getItemCount() {
return responseList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView date,locationType;
CardView provideBidCV;
LinearLayout dayLLayout,locationTypeLLayout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
date = itemView.findViewById(R.id.date_value);
day = itemView.findViewById(R.id.day_value);
locationType = itemView.findViewById(R.id.locationType_value);
locationTypeLLayout = itemView.findViewById(R.id.locationTypeLLayout);
}
}
}
我有这个错误,我试着修复了一段时间,直到我找到解决方案。
我做了一个私有方法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;}
}