Android ListView con múltiples selecciones y adaptadores personalizados

Tengo un ListView con un adaptador de encargo. El ListView permite selección múltiple, pero de alguna manera no reconoce cuándo se selecciona un elemento.

Ya he hecho que los elementos del adaptador se extiendan Comprobable, pero aún así el getCheckedItemPositions() devuelve una matriz de falsos.

Supongo que hay algo fundamental que estoy haciendo mal, pero he sido incapaz hasta ahora de encontrar ejemplos de múltiples ListViews seleccionar donde el adaptador no era un ArrayAdapter usando el diseño por defecto para múltiples selecciones.

Cualquier ayuda sería muy apreciada.

El código está abajo:

Clase principal:

 listView = (ListView) findViewById(R.id.cardlist); tca = new TextCardAdapter(mInflater); listView.setAdapter(tca); 

Adaptador:

 public class TextCardAdapter extends BaseAdapter { private int count = 0; private List<CheckableCard> cardList = new ArrayList<CheckableCard>(); private LayoutInflater mInflater; public TextCardAdapter(LayoutInflater inflater) { this.mInflater = inflater; } @Override public int getCount() { return count; } @Override public Object getItem(int position) { return cardList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.textlayout_row, null, false); convertView.setClickable(true); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.card_name); holder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final CheckableCard card = cardList.get(position); holder.text.setText(card.card.toString()); holder.checkbox.setChecked(card.isChecked()); holder.checkbox.setOnClickListener(card.checkListener); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { card.checkListener.onClick(v); holder.checkbox.setChecked(card.isChecked()); } }); return convertView; } public void add(Card card) { cardList.add(new CheckableCard(card)); count++; notifyDataSetChanged(); } public void addAll(Collection<Card> cardColl) { for (Card c : cardColl) add(c); } public void removeAll() { count = 0; cardList.clear(); notifyDataSetChanged(); } public Card getCard(int position) { CheckableCard cc = (CheckableCard) getItem(position); if (cc == null) return null; return cc.card; } public class CheckableCard implements Checkable { private boolean checked = false; public final Card card; public final OnClickListener checkListener; public CheckableCard(Card card) { this.card = card; checkListener = new OnClickListener() { @Override public void onClick(View v) { toggle(); } }; } @Override public boolean isChecked() { return checked; } @Override public void setChecked(boolean checked) { this.checked = checked; } @Override public void toggle() { checked = !checked; } } static class ViewHolder { TextView text; CheckBox checkbox; } } 

Sólo tiene un intento:

  1. listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

  2. holder.checkbox.setFocusable(false);

  3. Creo que es la vista del elemento secundario listView shoudld implementa la interfaz verificable, lo que significa que la vista convertida (convertView) debe tener todo el método de Checkable.

Tuve un problema como este una vez. Tiene algo que ver con el hecho de que tiene una vista en el adaptador que se puede seleccionar haciendo que el padre ignorarlo. Su eliminación le permite seleccionar de nuevo la fila de la vista de lista. Lo que has creado es básicamente un botón en un botón, android no le gusta eso 🙁

Tuve un problema similar. Mi vista de elemento de lista es un RealativeLayout con un LinearLayout que contiene un CheckBox y un TextView. No onItem … Listener fue llamado hasta que estableciera CheckBox.focusable a false. Además, los objetos del adaptador no deben ser verificables, pero las vistas se utilizan como diseño para el elemento de lista.

  • Deshabilitar evento de clic en los elementos de lista de reproducción de Android
  • Cómo mostrar un texto "Cargando ..." mientras recupera elementos para un ListView
  • Android: Cambia la imagen de un elemento en particular en listview
  • Funcionalidad de búsqueda de Android utilizando listview desde el archivo JSON (Hard)
  • Agregar CheckBox a la vista de fila ListView hace que la fila no haga clic
  • Cómo detectar si un ListView se desplaza rápidamente
  • OnItemLongClickListener no funciona en una vista de lista personalizada
  • Android: cómo eliminar un elemento de una listaVer y arrayAdapter
  • ¿Cómo hacer una lista emergente como un hilandero sin el hilador en androide?
  • Cómo utilizar notifyDataSetChanged () en el subproceso
  • ¿Cómo puedo agregar espacio en blanco al final de un ListView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.