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

时间:2020-04-06 09:25:27

标签: android firebase android-recyclerview

我正在使用片段和Firebase数据库的回收者视图开发一个应用程序。我希望该应用程序从数据库中获取数据并将其显示在片段布局中。我几乎认为我的代码很好,应该可以正常工作。

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

我尝试了其他问题,包括论坛。

这是我的home.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);
    }
}

}

我对此非常不满意。 预先感谢。

2 个答案:

答案 0 :(得分:1)

尝试更改

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

return view;

答案 1 :(得分:0)

您应该将onViewCreated而不是onCreateView中的RecylcerView初始化,请看一下answer

相关问题