0
votes

Comment mettre à jour la liste après avoir supprimé un élément?

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

        }
    });
}
}


0 commentaires

3 Réponses :


0
votes

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.


3 commentaires

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.



0
votes

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.


0 commentaires

0
votes

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.


4 commentaires

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.