如何解决E/RecyclerView:未连接适配器;跳过布局



我正在开发一个带有firebase数据库的碎片和回收器视图的应用程序。我希望应用程序从数据库中获取数据,并在片段布局中显示它。我认为我的代码很好,应该可以正常工作。

我得到错误日志E/RecyclerView: No adapter attached; skipping layout

我在其他问题、论坛上尝试了所有内容。

这是我的家.java代码:

public class home extends Fragment {
private OnFragmentInteractionListener mListener;
public home() {
}
// TODO: Rename and change types and number of parameters
public static home newInstance() {
home fragment = new home();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
//to recycler view.
private RecyclerView recyclerView;
public View view;
private ArrayList<Model> listItem;
ViewAdapter Vadapter;
DatabaseReference dbRef;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_home, container,false);
recyclerView = view.findViewById(R.id.carDetailsContainer);
listItem = new ArrayList<Model>();
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
dbRef = FirebaseDatabase.getInstance().getReference().child("Cars");
Vadapter = new ViewAdapter(getContext(),listItem);
recyclerView.setAdapter(Vadapter);
return inflater.inflate(R.layout.fragment_home, container, false);
}
@Override
public void onStart() {
super.onStart();
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren())
{
Model model = new Model(ds.child("Name").getValue().toString(),ds.child("Milege").getValue().toString(),ds.child("Fuel").getValue().toString(),ds.child("Transmission").getValue().toString(),ds.child("Rate").getValue().toString());
listItem.add(model);
}
Vadapter = new ViewAdapter(getContext(),listItem);
recyclerView.setAdapter(Vadapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
dbRef.addValueEventListener(valueEventListener);
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}

}

我的适配器类:

public class ViewAdapter extends RecyclerView.Adapter<ViewAdapter.MyViewHolder> {

DatabaseReference ref;
FirebaseDatabase fbRref;
Context context;
ArrayList<Model> model;
public ViewAdapter(Context c, ArrayList<Model> listItems)
{
this.context = c;
this.model = listItems;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.car_details, parent, false);
fbRref = FirebaseDatabase.getInstance();
ref = fbRref.getReference();
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.carName.setText(model.get(position).getmCarName());
holder.seatingCapacity.setText(model.get(position).getmSeatingCapacity());
}
@Override
public int getItemCount() {
return model.size();
}
class MyViewHolder extends RecyclerView.ViewHolder
{
public TextView carName,seatingCapacity;
public MyViewHolder(@NonNull View itemView)
{
super(itemView);
carName = itemView.findViewById(R.id.car_name);
seatingCapacity = itemView.findViewById(R.id.seating_capacity);
}
}

}

我在这方面陷入了困境。提前谢谢。

尝试更改

return inflater.inflate(R.layout.fragment_home, container, false); 

return view;

您应该在onViewCreated而不是onCreateView中移动RecylcerView的初始化,看看这个答案

最新更新