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?

5 Solutions collect form web for “Cómo borrar ArrayAdapter con ListView personalizado”

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); } 
  • Android convertView, para usarlo o no?
  • ListFragment falta el divisor
  • Android Eliminar Soft Keyboard al tocar la vista de lista
  • Teclado cubre la pantalla en lugar de empujar hasta el diseño?
  • ¿Hay algo como NSDictionary en android?
  • Pulse ListView cuando aparezca el teclado sin ajustarPan
  • Android PopUp ListView
  • Cómo hacer que android listview desplazable?
  • Establecer la altura de ListView de forma dinámica en función de la vista de texto multilínea dentro de ella
  • Cómo utilizar ListFragment en Android Swipe Tabs?
  • Cómo guardar listview en android y buscarlo de nuevo cuando sea necesario?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.