web-dev-qa-db-fra.com

Supprimer des éléments de liste 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/remplace pas tous les éléments ListView.

58
kavitha

Vous souhaiterez remove() l'élément de votre objet adaptateur, puis exécutez simplement le notifyDatasetChanged() sur l'adaptateur. Tout ListViews sera (devrait) recyclé et mis à jour par lui-même.

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();
        }
    });
72
esharp

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

listview.invalidateViews();

Pour supprimer un élément, il suffit de supprimer cet élément de la liste que nous avons transmise à l'adaptateur et de faire listview.invalidateViews();
Ceci actualisera la liste

24

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

19
Janusz
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
 adapter.remove(adapter.getItem(i));
}

puis appelez notifyDataSetChanged();

15
Rex

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

m_adapter.remove(o);
m_adapter.notifyDataSetChanged();
9
Atma
            names = db.getSites();
            la = new ArrayAdapter<String>(EditSiteList.this,
                    Android.R.layout.simple_list_item_1, names);
            EditSiteList.this.setListAdapter(la);
            listview.invalidateViews();

ce code fonctionne bien pour moi.

4
user590849
  • Vous ne devez utiliser qu'un seul adaptateur associé à la liste de données à répertorier.
  • Lorsque vous devez supprimer et remplacer tous les éléments, vous devez effacer tous les éléments de la liste de données à l'aide de "list.clear ()", puis ajouter de nouvelles données à l'aide de "list.addAll (List)".

voici un exemple:

List<String> myList = new ArrayList<String>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,       Android.R.layout.simple_list_item_1, myList);
listview.setAdapter(adapter);
listview.setOnItemClickListener(this);

populateList(){
   List<String> result = getDataMethods();

   myList.addAll(result);
   adapter.notifyDataSetChanged();
}

repopulateList(){
   List<String> result = getDataMethods();

   myList.clear();
   myList.addAll(result);
   adapter.notifyDataSetChanged();
}
4
HatemTmi

Essayez ce code, ça marche pour moi.

public class Third extends ListActivity {
private ArrayAdapter<String> adapter;
private List<String> liste;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_third);
     String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                "Linux", "OS/2" };
     liste = new ArrayList<String>();
     Collections.addAll(liste, values);
     adapter = new ArrayAdapter<String>(this,
                Android.R.layout.simple_list_item_1, liste);
     setListAdapter(adapter);
}
 @Override
  protected void onListItemClick(ListView l, View v, int position, long id) {
     liste.remove(position);
     adapter.notifyDataSetChanged();
  }
}
3
Nadhir Titaouine

Au début, vous devriez supprimer l'élément de votre liste. Plus tard, vous pourrez vider votre adaptateur et le remplir avec une nouvelle liste.

private void add(final List<Track> trackList) {
    MyAdapter bindingData = new MyAdapter(MyActivity.this, trackList);

    list = (ListView) findViewById(R.id.my_list); // TODO

    list.setAdapter(bindingData);


    // Click event for single list row
    list.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                final int position, long id) {
            // ShowPlacePref(places, position);
            AlertDialog.Builder showPlace = new AlertDialog.Builder(
                    Favoriler.this);
            showPlace.setMessage("Remove from list?");
            showPlace.setPositiveButton("DELETE", new OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {    

                    trackList.remove(position); //FIRST OF ALL REMOVE ITEM FROM LIST
                    list.setAdapter(null); // THEN EMPTY YOUR ADAPTER

                    add(trackList); // AT LAST REFILL YOUR LISTVIEW (Recursively)

                }

            });
            showPlace.setNegativeButton("CANCEL", new OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                }
            });
            showPlace.show();
        }

    });

}
1

C’est simple. Commencez par vider votre collection et ensuite effacer une liste comme celle-ci:

 yourCollection.clear();
 setListAdapter(null);
1
zheek