0
votes

Liste ne pas passer à l'adaptateur de recycleur de l'activité

J'essaie de transmettre une arrayliste à ma classe d'adaptateur Recycler. J'ai mis en œuvre avec succès 2 autres vues de recycleur de mon code, mais dans ce cas, la liste des matrices égales à NULL est adoptée. Voici le code de mon activité.

public class PlacedOrders extends AppCompatActivity {

private Toolbar tb;
private User u;
private ArrayList<OrderModel> orderList = new ArrayList<>();
private DatabaseReference root = FirebaseDatabase.getInstance().getReference();
private DatabaseReference ordersReference;


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

    tb = findViewById(R.id.customToolbar);
    setSupportActionBar(tb);

    Intent i = getIntent();
    u = i.getParcelableExtra("USER_DATA");

    ordersReference = root.child("Orders").child(u.getUserId());
    setRecyclerView();
}

public void setRecyclerView(){

    ordersReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()){
                OrderModel om = (ds.getValue(OrderModel.class));
                orderList.add(om);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

    RecyclerView recyclerView = findViewById(R.id.recycler_view_storeOrders_parent);
    recyclerView.setHasFixedSize(false);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    PlacedOrderParentAdapter placedOrderParentAdapter = new PlacedOrderParentAdapter(this, orderList);
    recyclerView.setAdapter(placedOrderParentAdapter);

    }
}


1 commentaires

Juste pour ajouter. Lorsque j'ajoutez manuellement un objet de commande de commande à la flambée sans utiliser la boucle DatasnaSshot. La vue Recycler fonctionne bien


3 Réponses :


1
votes

Avant de définir votre adaptateur et que vous pouvez essayer ceci:

public void setRecyclerView(){

RecyclerView recyclerView = findViewById(R.id.recycler_view_storeOrders_parent);
recyclerView.setHasFixedSize(false);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
PlacedOrderParentAdapter placedOrderParentAdapter = new PlacedOrderParentAdapter(this, orderList);
recyclerView.setAdapter(placedOrderParentAdapter);

ordersReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()){
            OrderModel om = (ds.getValue(OrderModel.class));
            orderList.add(om);
        }
       placedOrderParentAdapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

}


0 commentaires

0
votes

C'est parce que recyclerview.setadapter est appelé avant que les données ne soient extraites de la base de données et OnDataChange est appelée. Le meilleur moyen de gérer ce cas est de créer une méthode dans votre classe d'adaptateur pour prendre de nouveaux éléments et appelez notifydatastetchanged en elle après avoir ajouté l'élément pour charger les nouvelles modifications de votre liste
Dans votre classe d'adaptateur: xxx

et votre code devient comme ça xxx


0 commentaires

0
votes

c'est parce que le Ondatacharge () Le rappel prend un certain temps avant d'exécuter:

Ce que vous pouvez faire est celui-ci:

Voyez-vous ces 2 lignes Dans votre SETRecyClerView () Méthode: xxx

déplacez-les directement sous la boucle dans OnDataChange () : xxx


0 commentaires