Адаптер не подключен;пропускающий макет: RecyclerView & Adapter - PullRequest
1 голос
/ 22 сентября 2019

Я видел много ответов по этой проблеме, но ничего не работает для моего кодирования.

Я сослался на коды, основанные на этом youtube видео, и теперь у меня есть эта проблема.Не уверен, как работает его код, а мой нет.Видимо я тоже новичок в этой теме (RecyclerView).

Это мое основное занятие:

@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.

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);


    }

1 Ответ

1 голос
/ 22 сентября 2019

Установите адаптер в 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();
             }
         });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...