Eliminar elementos ListView en Android

¿Alguien puede darme un código de ejemplo para eliminar todos los elementos de ListView y reemplazarlos con nuevos?

Traté de reemplazar los elementos del adaptador sin éxito. Mi código es

populateList(){ results //populated arraylist with strings ArrayAdapter adapter = new ArrayAdapter(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 adapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, results1); listview.setAdapter(adapter1); adapter1.notifyDataSetChanged(); listview.setOnItemClickListener(this); } 

Aquí el método repopulateList() se agregará a los elementos de ListView, pero no eliminará ni reemplazará todos los elementos de ListView.

notifyDatasetChanged() remove() el elemento de su objeto adaptador y luego ejecutar el notifyDatasetChanged() en el Adaptador, cualquier ListView s (debería) reciclar y actualizar por sí mismo.

Aquí hay un breve ejemplo de actividad con AlertDialog s:

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

Creo que si agregas el siguiente código, funcionará

 listview.invalidateViews(); 

Para eliminar un elemento, simplemente elimine ese elemento de la lista de arrays que pasamos al adaptador y haga listview.invalidateViews();
Esto actualizará la lista

Puedes usar

 adapter.clear() 

que eliminará todos los elementos de su primer adaptador, entonces puede configurar otro adaptador o reutilizar el adaptador y agregar los elementos al adaptador anterior. Si utiliza

 adapter.add() 

para agregar datos a su lista, no necesita llamar a notifyDataSetChanged

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

luego llame a notifyDataSetChanged();

Quítelo del adaptador y luego notifique al adaptador de arrays que el conjunto de datos ha cambiado.

 m_adapter.remove(o); m_adapter.notifyDataSetChanged(); 
  names = db.getSites(); la = new ArrayAdapter(EditSiteList.this, android.R.layout.simple_list_item_1, names); EditSiteList.this.setListAdapter(la); listview.invalidateViews(); 

este código funciona bien para mí.

  • Debe usar solo un adaptador enlazado con la lista de datos que necesita para listar
  • Cuando necesite eliminar y reemplazar todos los elementos, debe borrar todos los elementos de la lista de datos usando “list.clear ()” y luego agregar nuevos datos usando “list.addAll (List)”

aquí un ejemplo:

 List myList = new ArrayList(); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, myList); listview.setAdapter(adapter); listview.setOnItemClickListener(this); populateList(){ List result = getDataMethods(); myList.addAll(result); adapter.notifyDataSetChanged(); } repopulateList(){ List result = getDataMethods(); myList.clear(); myList.addAll(result); adapter.notifyDataSetChanged(); } 

Prueba este código, funciona para mí.

 public class Third extends ListActivity { private ArrayAdapter adapter; private List 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(); Collections.addAll(liste, values); adapter = new ArrayAdapter(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(); } } 

Al principio, debes eliminar el elemento de tu lista. Más tarde puede vaciar su adaptador y rellenarlo con una nueva lista.

 private void add(final List 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(); } }); } 

Es simple. Primero debe borrar su colección y después de una lista clara como este código:

  yourCollection.clear(); setListAdapter(null); 

Puedes usar

  lv.setAdapter(null);