Fragment中解决RecyclerView"No adapter attached skipping layout"问题
问题:Fragment中的RecyclerView无法显示Firebase加载的数据
实现逻辑说明
我已在Fragment的onCreateView方法中完成RecyclerView初始化、适配器绑定,以及从Firebase加载数据填充ArrayList的逻辑,适配器数据源为ArrayList类型的plist。同时已在RecyclerView布局中通过app:layoutManager属性设置LinearLayoutManager,自认为适配器代码无问题,但数据始终无法显示。
Fragment代码
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_buy, container, false); recyler = rootView.findViewById(R.id.recycler); recyler.setHasFixedSize(true); reference = FirebaseDatabase.getInstance().getReference("Produce"); plist = new ArrayList<>(); adapter = new Produce_RecyclerViewAdapter(rootView.getContext(), plist); recyler.setAdapter(adapter); final int count = 0; reference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { for (DataSnapshot ds : snapshot.getChildren()) { Produce produce = ds.getValue(Produce.class); plist.add(produce); } adapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError error) { Display(); } }); return inflater.inflate(R.layout.fragment_buy, container, false); }
RecyclerView适配器代码
public class Produce_RecyclerViewAdapter extends RecyclerView.Adapter<Produce_RecyclerViewAdapter.ViewHolder>{ private final List<Produce> produce_item; private final Context context; public Produce_RecyclerViewAdapter(Context context, ArrayList<Produce> produce_item) { this.produce_item = produce_item; this.context = context; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); View view = inflater.inflate(R.layout.produce_item, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { Produce produce = produce_item.get(position); holder.ptitle.setText(produce.getPname()); holder.pprice.setText(produce.getPprice()); Picasso.with(context) .load(produce.getPimg()) .placeholder(R.mipmap.ic_launcher) .fit() .centerCrop() .into(holder.pimage); } @Override public int getItemCount() { return produce_item.size(); } public class ViewHolder extends RecyclerView.ViewHolder{ ImageView pimage; TextView ptitle, pprice; CardView view, addtocart; public ViewHolder(@NonNull View itemView) { super(itemView); pimage = itemView.findViewById(R.id.pimage); ptitle = itemView.findViewById(R.id.ptitle); pprice = itemView.findViewById(R.id.pprice); view = itemView.findViewById(R.id.view); addtocart = itemView.findViewById(R.id.addtocart); } } }
RecyclerView布局代码
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:orientation="vertical" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
Firebase数据结构
Firebase中Produce节点下包含多个子项,每个子项均包含pname(商品名称)、pprice(商品价格)、pimg(商品图片链接)等字段,数据格式正常。
已尝试的解决步骤
我已查阅“RecyclerView No adapter attached; skipping layout”相关问题及其他资料,要么已尝试对应的解决方案,要么这些方案仅针对Activity中的RecyclerView,问题仍未解决。
内容的提问来源于stack exchange,提问作者Belko DIALLO
相关产品推荐
相关产品推荐

