Android: cómo eliminar un elemento de una listaVer y arrayAdapter

Tengo una colección de artículos en un ArrayList. Los agrego a un adaptador de cliente de la siguiente manera:

this.m_adapter = new MyAdapter(this, R.layout.myitem, itemCart.m_items); 

Tengo un botón de borrado para cada uno de estos elementos en mi lista, pero no estoy seguro de cómo conectar onClick() del botón delete con el elemento original en ArrayList. ¿Puede alguien explicar por favor cómo hacer esto o señalarme un tutorial donde puedo leer sobre esto? Las respuestas no sarcásticas / no condescendientes son muy apreciadas.

Puede llamar al método remove() en su ArrayList

 itemCart.m_items.remove(<index of element to remove>); this.m_adapter.notifyDataSetChanged(); 

Y entonces usted necesita llamar a notifyDataSetChanged(); En su adaptador para actualizar el ListView

Aquí está mi solución hasta ahora:

En el método getView() hago algo como esto:

 deleteButton.setTag(position); 

Parece que getTag() devuelve un objeto. Así que convirtió la posición int en un objeto entero primero. Parece estar funcionando.

En el OnClickListener() hago lo siguiente:

 items.remove(index.intValue()); 

Hasta aquí todo bien.

Puede obtener el índice del elemento simplemente notando que una vista de lista es una colección de vistas secundarias (las filas de la lista).

Puedes hacer algo como esto en tu código:

(Dentro del método getView (), por ejemplo)

 row.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View view) { remove(listView.indexOfChild(view)); return true; } } 

Es decir, la solución es simplemente utilizar el método indexOfChild (View) para obtener el índice de la vista secundaria que el usuario (largo) presionó.

Siguientes trabajos para mí:

 /* Read values from resource into an array */ String[] strColorValues = getResources().getStringArray(R.array.colors); ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < strColorValues.length; i++) { list.add(strColorValues[i]); } ArrayAdapter adapterColors = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, list); adapterColors.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerColors.setAdapter(adapterPermissionLevels); spinnerColors.setOnItemSelectedListener(this); /* Remove first element from the adapter and notify dataset changed. */ String item = spinnerColors.getItemAtPosition(0).toString(); adapterColors.remove(item); adapterColors.notifyDataSetChanged(); 

Aquí está mi código.

  transfer.setItemPosition(position, items.get(position).getAddMode()); 

La transferencia aquí es la instancia de la clase principal. Cada vez que hago clic en el botón delete, pasa la posición del elemento en la lista de esta línea.

  public View getView(final int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { final Context context = getContext(); LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.listviewitem_layout, null); } ItemEntry item = items.get(position); if (item != null) { TextView textViewName = (TextView) v.findViewById(R.id.textViewItemName); ImageView imageViewDelete = (ImageView) v.findViewById(R.id.imageViewDeleteIcon); imageViewDelete.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { transfer.showDialog(4); transfer.setItemPosition(position, items.get(position).getAddMode()); } }); if (textViewName != null) { textViewName.setText(item.getItemName()); } if(imageViewDelete != null) { imageViewDelete.setImageResource(R.drawable.delete); } } return v; } } 

Si utiliza el menú contextual, entonces puede obtener AdapterContextMenuInfo y esta estructura proporciona el índice y el ID del elemento seleccionado.

Parece que puede obtener el índice (o posición) de un elemento seleccionado en el ListView de la siguiente manera:

 listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { listview.remove(listview.getItem(position).toString()); } } 

Así que necesitas escuchar los clics en Views y luego tomar el índice de eso.

Eliminar por posición:

 mainAdapter.remove(mainAdapter.getItem(position)); 

Tal como el último:

 mainAdapter.remove(mainAdapter.getItem(mainAdapter.getCount() - 1)); 
  • Android looping infinito ListView?
  • ¿Por qué obtengo NullPointerException cuando uso setCurrentText o setText para TextSwitcher?
  • Crash después de agregar pie de página a ListView
  • ¿Cómo configuro una imagen de fondo de ListView vacía?
  • Lectura del archivo .txt desde un enlace compartido desde un dropbox Android studio
  • ¿Hay una manera de desactivar / editar el desvanecimiento que una vista de lista tiene en sus bordes?
  • EditText con la lista de sugerencias a continuación
  • Android listview obtiene el elemento seleccionado
  • Desactivar desplazamiento de Android y hacer clic para listview
  • Cómo agregar una vista dinámica a un elemento ListView en tiempo de ejecución?
  • ¿Cómo actualizar dinámicamente un ListView con un adaptador personalizado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.