Cómo borrar ArrayAdapter con ListView personalizado

Esto es cómo agrego artículos al ListView:

public class ServersAdapter extends ArrayAdapter<String> { public ServersAdapter(Context context, int resource, int textViewResourceId, String[] servers) { super(context, resource, textViewResourceId, servers); Log.d("noc", "ServersAdapterin: "); // TODO Auto-generated constructor stub } @Override public View getView(int position, View convertView, ViewGroup parent) { Log.d("noc", "getView: "); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View row = inflater.inflate(R.layout.servers_list, parent, false); Log.d("noc", "inflate: "); //datasource = new ServersDataSource(getContext()); datasource.open(); //servir list Log.d("noc", "ServersDataSource: "); Server[] servers = datasource.getAllServers(); ImageView iv = (ImageView) row.findViewById(R.id.imageView1); TextView tv = (TextView) row.findViewById(R.id.textView1); Log.d("noc", "setText: "); if (servers.length > 0) { tv.setText(servers[position].getTitle()); Log.d("noc", "getTitle: "); Log.d("noc", "servers[position].getTitle()-==================: "+ servers[position].getTitle()); if (servers[position].getEnabled() < 1) { iv.setImageResource(R.drawable.ic_server_status_red); } else { iv.setImageResource(R.drawable.ic_server_status_green); } } return row; } } 

Esta es la onCreate:

 ...... try { Log.d("noc", "need to delete this: "); datasource = new ServersDataSource(this); datasource.open(); //servir list Log.d("noc", "servir list: "); //String[] servers = new String[10]; //servir list Log.d("noc", "ServersDataSource: "); String[] servers = new String[10]; Log.d("noc", "end need to delete this"); ArrayAdapter<Server> adapter = new ServersAdapter(this, android.R.layout.simple_list_item_1, R.id.textView1, servers); setListAdapter(adapter); } catch (Exception e) { Log.d("noc", "error (ArrayAdapter): " + e.toString()); } 

No puedo borrar un ListView de todo su contenido (estoy tratando de vaciarlo). He estado tratando de hacerlo así:

 ArrayAdapter<Server> adapter = (ArrayAdapter<Server>) getListAdapter(); Server server = null; switch (view.getId()) { case R.id.add: // Save the new server to the database // server_id, "title", "url", "ip", enabled, "services", fetch_interval server = datasource.createServer(1, "title of the server", "url of the server", "ip of the server", 1, "services of the server", 1); adapter.add(server); break; case R.id.delete: Log.d("noc", "delete "); if (getListAdapter().getCount() > 0) { datasource.emptyServersTable(); Log.d("noc", "clear "); adapter.clear(); Log.d("noc", "after clear "); } break; } Log.d("noc", "notifyDataSetChanged"); adapter.notifyDataSetChanged(); 

Y esta es la salida cuando haga clic en "eliminar":

 01-11 23:41:54.210: D/noc(14898): delete 01-11 23:41:54.210: D/noc(14898): emptyServersTable: 01-11 23:41:54.230: D/noc(14898): clear 01-11 23:41:54.230: D/AndroidRuntime(14898): Shutting down VM 01-11 23:41:54.230: W/dalvikvm(14898): threadid=1: thread exiting with uncaught exception (group=0x4140e2a0) 01-11 23:41:54.230: E/AndroidRuntime(14898): FATAL EXCEPTION: main 01-11 23:41:54.230: E/AndroidRuntime(14898): java.lang.IllegalStateException: Could not execute method of the activity 01-11 23:41:54.230: E/AndroidRuntime(14898): at android.view.View$1.onClick(View.java:3699) 01-11 23:41:54.230: E/AndroidRuntime(14898): at android.view.View.performClick(View.java:4223) 01-11 23:41:54.230: E/AndroidRuntime(14898): at android.view.View$PerformClick.run(View.java:17275) 01-11 23:41:54.230: E/AndroidRuntime(14898): at android.os.Handler.handleCallback(Handler.java:615) 01-11 23:41:54.230: E/AndroidRuntime(14898): at android.os.Handler.dispatchMessage(Handler.java:92) 01-11 23:41:54.230: E/AndroidRuntime(14898): at android.os.Looper.loop(Looper.java:137) 01-11 23:41:54.230: E/AndroidRuntime(14898): at android.app.ActivityThread.main(ActivityThread.java:4898) 01-11 23:41:54.230: E/AndroidRuntime(14898): at java.lang.reflect.Method.invokeNative(Native Method) 01-11 23:41:54.230: E/AndroidRuntime(14898): at java.lang.reflect.Method.invoke(Method.java:511) 01-11 23:41:54.230: E/AndroidRuntime(14898): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008) 01-11 23:41:54.230: E/AndroidRuntime(14898): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775) 01-11 23:41:54.230: E/AndroidRuntime(14898): at dalvik.system.NativeStart.main(Native Method) 01-11 23:41:54.230: E/AndroidRuntime(14898): Caused by: java.lang.reflect.InvocationTargetException 01-11 23:41:54.230: E/AndroidRuntime(14898): at java.lang.reflect.Method.invokeNative(Native Method) 01-11 23:41:54.230: E/AndroidRuntime(14898): at java.lang.reflect.Method.invoke(Method.java:511) 01-11 23:41:54.230: E/AndroidRuntime(14898): at android.view.View$1.onClick(View.java:3694) 01-11 23:41:54.230: E/AndroidRuntime(14898): ... 11 more 01-11 23:41:54.230: E/AndroidRuntime(14898): Caused by: java.lang.UnsupportedOperationException 01-11 23:41:54.230: E/AndroidRuntime(14898): at java.util.AbstractList.remove(AbstractList.java:638) 01-11 23:41:54.230: E/AndroidRuntime(14898): at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:75) 01-11 23:41:54.230: E/AndroidRuntime(14898): at java.util.AbstractList.removeRange(AbstractList.java:658) 01-11 23:41:54.230: E/AndroidRuntime(14898): at java.util.AbstractList.clear(AbstractList.java:466) 01-11 23:41:54.230: E/AndroidRuntime(14898): at android.widget.ArrayAdapter.clear(ArrayAdapter.java:258) 01-11 23:41:54.230: E/AndroidRuntime(14898): at com.wr.noc.ServersStatus.onClick(ServersStatus.java:91) 01-11 23:41:54.230: E/AndroidRuntime(14898): ... 14 more 

Entonces, cuál es el problema. ¿Hay otra manera de hacerlo?

Debe intentar anular el método clear() en la clase ServersAdapter y agregar una llamada al método clear() de su ArrayList si tiene uno. Si los datos se cargan en vistas desde una matriz, simplemente vacíenla.

Mirando su código, creo que uno de los servidores es el servidor .

Supongo que pasaste una lista o una matriz al adaptador. Si mantiene la instancia de estos elementos agregados, puede hacer un:

 adapter.clear(); listview.getAdapter().notifyDataSetChanged(); 

No todos los adaptadores tienen un método clear() . ArrayAdapter, pero ListAdapter o SimpleAdapter no lo hacen

La implementación para ese constructor (el que tiene la matriz) hace Arrays.asList(objects) que crea una lista inmutable. Trate de pasar una ArrayList explícita con sus cadenas a este constructor:

  public ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) 

Como por mi conocimiento no hay necesidad de borrar el adaptador y establecer notifyDataSetChanged () para el adaptador. U han utilizado la lista, ArrayList Para el artículo o el arsenal 1 st lo despejan y reinicializan él y después de pasar los datos al adaptador del traje claro el arsenal utilizado / lista. ¡Funcionará muy bien!

Pruebe esto, elimina todos los elementos de la vista

  final int adapterCount = adapter.getCount(); for (int i = 0; i < adapterCount; i++) { View item = adapter.getView(i, null, null); myLayout.removeView(item); } 
  • ¿Hay una manera de mantener los divisores alrededor de una preferencia no seleccionable?
  • Agregando Viewpager como un encabezado a un listView
  • Uso de la biblioteca Picasso con ListView
  • Android: mantiene el elemento de ListView resaltado una vez que se ha hecho clic en él.
  • El adaptador getView () pide la posición 0 dos veces antes de cada posición. ¿Por qué?
  • AdapterView.OnItemClickListener con más ListView
  • Cómo restablecer el ListView con el ArrayAdapter después de buscar datos
  • Desplazar el elemento ListView De derecha a izquierda mostrar el botón de borrado
  • ExpandableListView con opción múltiple guardar el elemento seleccionado en un array
  • Uso de Android SimpleCursorAdapter y CursorLoader
  • Lista de retención en el fragmento de lista sobre el cambio de orientación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.