Chaque fois que je supprime une donnée de Firebase dans la vue de liste, je visualise la division des données et pas correctement. J'ai déjà l'adaptateur mais je ne peux pas le gérer. Dans ce code, je vois la vue de liste sur Firebase et lorsque je clique sur une donnée, je demande à l'utilisateur s'il veut supprimer les données. que dois-je faire?
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); firebaseAuth = FirebaseAuth.getInstance(); firebaseUser = firebaseAuth.getCurrentUser(); setContentView(R.layout.activity_elenco); storage = FirebaseStorage.getInstance(); //storageReference = storage.getReference(); listView = findViewById(R.id.listView); databaseReference = FirebaseDatabase.getInstance().getReference("Users"); usersList = new ArrayList<>(); } @Override protected void onStart() { super.onStart(); Query query = databaseReference.orderByChild("id").equalTo(firebaseUser.getUid()); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { for(DataSnapshot usersSnapshot:dataSnapshot.getChildren()){ Users users = usersSnapshot.getValue(Users.class); usersList.add(users); keyList.add(usersSnapshot.getKey()); } UserAdapter userAdapter = new UserAdapter(Elenco.this,usersList); listView.setAdapter(userAdapter); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { final CharSequence[] items = {"SI","NO"}; AlertDialog.Builder builder = new AlertDialog.Builder(Elenco.this); @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { builder.setTitle("Vuoi eliminare la segnalazione?"); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int i) { if(items[i]=="SI"){ StorageReference photoRef = storage.getReferenceFromUrl("gs://tesi-779f2.appspot.com/"+keyList.get(position)); photoRef.delete(); usersList.remove(position); databaseReference.getRoot().child("Users").child(keyList.get(position)).removeValue(); keyList.remove(position); startActivity(new Intent(Elenco.this,Profilo.class)); }else if(items[i]=="NO"){ dialog.dismiss(); } } }); builder.show(); } }); } }
3 Réponses :
UserAdapter userAdapter . rendre cette variable globale sur la méthode onCreate.
et dans l'événement onItemClick après
userAdapter.notifyDataSetChanged();
écrire sous la ligne.
keyList.remove(position); startActivity(new Intent(Elenco.this,Profilo.class));
Cela mettra à jour votre liste.
Donnez cette erreur: java.lang.RuntimeException: Impossible d'instancier l'activité ComponentInfo {com.example.registrazioneapp / com.example.regis trazioneapp.Elenco}: java.lang.IllegalStateException: Services système non disponibles pour les activités avant onCreate ()
pouvez-vous poster votre code complet ici. alors je vais t'aider
je résolveur! mettre l'utilisateur List.clear (); dans la méthode onDataChange.
Définissez une méthode dans la classe d'adaptateur comme celle-ci
public void refresh(List<Users> userList){ this.userList=userList; notifyDataSetChanged(); }
et appelez cette méthode chaque fois que vous apportez des modifications.
Vous devez supprimer les données de l'adaptateur de la vue de liste via
adapter.remove (adapter.getItem (position));
puis appelez notifyDataSetChanged ()
sur l'adaptateur.
veuillez modifier un message et dites-moi où saisir le code, sinon je ne comprends pas.
vérifier le changement
ne fonctionne pas. je mets notifyDataSetChanged (); mais donne-moi une erreur rouge
je résolveur! mettre l'utilisateur List.clear (); dans la méthode onDataChange.