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); } 
  • ClassCastException no puede convertir LinearLayout $ LayoutParams a AbsListView $ LayoutParams al establecer ListView Header
  • Cómo agregar un pie de página en ListView?
  • Android setOnCheckedChangeListener vuelve a llamar cuando la vista anterior vuelve
  • La mejor manera de implementar un cajón de desplazamiento de navegación
  • Una lista con selección múltiple en un cuadro de diálogo de alerta?
  • ExpandableListView - Ocultar indicador para grupos sin hijos
  • Quiero medir la altura del ListView (getHight () = 0)
  • Cómo llamar a evento de clic en Android ListView Header?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.