没有连接适配器;跳过布局:RecyclerView & Adapter

No adapter attached; skipping layout : RecyclerView & Adapter

我已经看到很多关于这个问题的答案,但对我的编码没有任何帮助。

我参考了基于这个 youtube 视频的代码,现在我遇到了这个问题。不确定他的代码是如何工作的,而我的则不是。显然我也是这个话题的新手(RecyclerView)。

这是我的主要 activity :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_product)  ;

    ref = FirebaseDatabase.getInstance().getReference().child("buddymealplanneruser").child("Products");
    recyclerView = findViewById(R.id.stallproductRecyclerView);

    //newest
    LinearLayoutManager manager = new LinearLayoutManager(this);
    manager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(manager);
    recyclerView.setHasFixedSize(true);
    //
    searchView = findViewById(R.id.searchProductStall);

}

@Override
protected void onRestart() {
    super.onRestart();
    if (ref!=null)
    {
         ref.addValueEventListener(new ValueEventListener() {
             @Override
             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                 if (dataSnapshot.exists())
                 {
                     list = new ArrayList<>();
                     for(DataSnapshot ds : dataSnapshot.getChildren())
                     {

                         list.add(ds.getValue(Model.class));
                     }
                     ViewHolder viewHolder = new ViewHolder(list);
                     recyclerView.setAdapter(viewHolder);
                 }

             }

             @Override
             public void onCancelled(@NonNull DatabaseError databaseError) {
                 Toast.makeText(ViewProduct.this, databaseError.getMessage(),
                         Toast.LENGTH_SHORT).show();
             }
         });
    }

这是 ViewHolder class。

ArrayList<Model> list;
    public ViewHolder (ArrayList<Model> list)
    {
        this.list=list;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_product,
                viewGroup,false);


        return new MyViewHolder(view);


    }

oncreate() 中设置适配器为空 data,在 fetching 数据之后你应该像下面那样调用 adapter.notifyDataSetChanged()

ViewHolder viewHolder;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_product)  ;

    ref = FirebaseDatabase.getInstance().getReference().child("buddymealplanneruser").child("Products");
    recyclerView = findViewById(R.id.stallproductRecyclerView);

    //newest
    LinearLayoutManager manager = new LinearLayoutManager(this);
    manager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(manager);
    recyclerView.setHasFixedSize(true);
    //
    searchView = findViewById(R.id.searchProductStall);

    // here you have to set the adapter to your recycler view
    list = new ArrayList<>();
    viewHolder = new ViewHolder(list);
    recyclerView.setAdapter(viewHolder);

}

@Override
protected void onRestart() {
    super.onRestart();
    if (ref!=null)
    {
         ref.addValueEventListener(new ValueEventListener() {
             @Override
             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                 if (dataSnapshot.exists())
                 {
                     // clear your previous data
                     list.clear();
                     for(DataSnapshot ds : dataSnapshot.getChildren())
                     {
                         list.add(ds.getValue(Model.class));
                     }
                     // here you have to notify you adapter that your data set is changed like below
                     viewHolder.notifyDataSetChanged();
                 }

             }

             @Override
             public void onCancelled(@NonNull DatabaseError databaseError) {
                 Toast.makeText(ViewProduct.this, databaseError.getMessage(),
                         Toast.LENGTH_SHORT).show();
             }
         });
    }