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); } }
3 Réponses :
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) { } }); }
C'est parce que et votre code devient comme ça p> recyclerview.setadapter code> est appelé avant que les données ne soient extraites de la base de données et
OnDataChange code> 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 code> en elle après avoir ajouté l'élément pour charger les nouvelles modifications de votre liste
Dans votre classe d'adaptateur:
c'est parce que le Ce que vous pouvez faire est celui-ci: p> déplacez-les directement sous la boucle dans Ondatacharge () code> Le rappel prend un certain temps avant d'exécuter:
SETRecyClerView () Code> Méthode: strong> p>
OnDataChange () code>: strong> p>
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