62 votes

Supprimer des éléments ListView dans Android

Quelqu'un peut-il me donner s'il vous plaît un exemple de code de suppression de tous les éléments ListView et de remplacement par de nouveaux éléments?

J'ai essayé de remplacer les éléments de l'adaptateur sans succès. Mon code est

 populateList(){

 results //populated arraylist with strings

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results);

 listview.setAdapter(adapter);
 adapter.notifyDataSetChanged();
 listview.setOnItemClickListener(this);

}

// now populating list again

repopulateList(){

 results1 //populated arraylist with strings

 ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results1);

 listview.setAdapter(adapter1);
 adapter1.notifyDataSetChanged();
 listview.setOnItemClickListener(this);
}
 

Ici, la méthode repopulateList() sera ajoutée aux éléments ListView, mais elle ne supprime ni ne remplace pas tous les éléments ListView.

78voto

esharp Points 580

Vous voudrez supprimer () l'élément de votre objet adaptateur, puis exécuter simplement notifyDatasetChanged () sur l'adaptateur; tout ListViews sera (devrait) recyclé et mis à jour de son propre chef.

Voici un bref exemple d'activité avec AlertDialogs:

 adapter = new MyListAdapter(this);
    lv = (ListView) findViewById(android.R.id.list);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
        AlertDialog.Builder adb=new AlertDialog.Builder(MyActivity.this);
        adb.setTitle("Delete?");
        adb.setMessage("Are you sure you want to delete " + position);
        final int positionToRemove = position;
        adb.setNegativeButton("Cancel", null);
        adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                MyDataObject.remove(positionToRemove);
                adapter.notifyDataSetChanged();
            }});
        adb.show();
        }
    });
 

24voto

Labeeb P Points 12645

Je pense que si vous ajoutez le code suivant, cela fonctionnera

 listview.invalidateViews();
 

Pour supprimer un élément, supprimez simplement cet élément de la liste que nous avons transmise à l'adaptateur et effectuez listview.invalidateViews();
Cela va actualiser la listview

19voto

Janusz Points 52607

Vous pouvez utiliser

 adapter.clear() 
 

Cela supprimera tous les éléments de votre premier adaptateur. Vous pourrez alors définir un autre adaptateur ou le réutiliser et ajouter les éléments à l'ancien. Si tu utilises

 adapter.add()
 

pour ajouter des données à votre liste, vous n'avez pas besoin d'appeler notifyDataSetChanged

15voto

Rex Points 107
 int count = adapter.getCount();
for (int i = 0; i < count; i++) {
 adapter.remove(adapter.getItem(i));
}
 

puis appelez notifyDataSetChanged();

10voto

Atma Points 5393

Supprimez-le de l'adaptateur, puis informez arrayadapter que le jeu de données a été modifié.

 m_adapter.remove(o);
m_adapter.notifyDataSetChanged();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X