Comment utiliser notifyDataSetChanged() et remove dans la methode getView()

Fermé
aissataaa - 1 août 2020 à 02:26
 aissataaa - 4 août 2020 à 06:48
Bonjour.
J'essaie de supprimer un item de ma listView en utilisant un alert dialog dans le getView.
Je suis dans la methode getView(), et je gere l'evenement sur un bouton de mon listview. La suppression est bien effectue' dans le serveur mais malheureusement on voit toujours la ligne dans la page. Elle disparait que quand je change de page et revient sur la page.

J'ai utilise' : notifiedSetDataChange() mais ca ne marche pas

J'aimerais savoir comment fait-on pour recharger la page afin que la ligne disparaisse automatiquement de la page ? Ou comment mettre a jour la listeView



public View getView(int position, @Nullable View convertView, @NonNull final ViewGroup parent) {
//return super.getView(position, convertView, parent);
final InfoApp app = getItem(position);

if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(idXml, null);
}
btnDelete.setOnClickListener(new View.OnClickListener(){

AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle("Suppression de l'application");
builder.setMessage("Etes-vous sure de vouloir suppprimer?");

builder.setPositiveButton("OUI", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int i) {

MyAsyncTask async = new MyAsyncTask();
async.execute("https://mon-site/delete?id=" + app.getId());
notifyDataSetChanged();
}
});

builder.setNegativeButton("ANNULER", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});

AlertDialog dialog = builder.create();
dialog.show();

}
});

return convertView;
}



Merci d'avance !

2 réponses

BunoCS Messages postés 15496 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 24 décembre 2024 3 912
3 août 2020 à 09:26
Bonjour,

notifyDataSetChanged()
doit être appelé sur l'adapter de la liste. De plus, ici, tu appelles la méthode notify alors que ton élément n'est pas encore supprimé car traitement asynchrone. Il faut donc l'appeler une fois que tu es sûr que ton élément n'existe plus.
0
Bonjour. Merci !

Je l'avais aussi appele' dans le onPostExecute() de l'asynctask mais ca ne marche toujours pas.


protected void onPostExecute(String s) {
super.onPostExecute(s);
Application[] app = new Gson().fromJson(s, Application[].class);
adapter = new InfoGeneraleApplicationAdapter(ctx, R.layout.listview_app, app);

if(s != null){
adapter.remove(app);
adapter.notifyDataSetChanged();
}
}


Ou me conseillez-vous ou comment me conseillez-vous de l'appeler svp ?
0
BunoCS Messages postés 15496 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 24 décembre 2024 3 912
3 août 2020 à 14:11
C'est bizarre comme façon de faire...
Ton adapter ne semble pas lié à une RecycleView...du coup, le notifyDataSetChanged() est sans effet.

Pour que le notify fonctionne, il faut :
- que tes données soient affichées
- que tu modifies l'adapter de la liste afficher
- que tu appelles sur cet adapter la méthode notify

Voici un exemple qui date un peu mais qui te montre le principe
0
aissataaa > BunoCS Messages postés 15496 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 24 décembre 2024
4 août 2020 à 06:48
Ok . Merci !
0