Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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.

  • ¿Preguntas con declaraciones preparadas en Android?
  • ¿Diferencias entre el complemento de Android NetBEANS y el complemento de Eclipse?
  • Android.content.res.Resources $ NotFoundException para ic_sync_black_24dp.xml
  • Cambiar el color predeterminado de la marca de verificación de CheckBox de Android
  • Color de texto de ActionBar
  • Ubuntu 64 con Android 64 Bundle no puede encontrar el ejecutable de adb
  • 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; } } 

  • "Campo se puede convertir a una variable local" aparece al configurar el color de la barra de acción
  • No se puede instalar la hormiga correctamente para phonegap utilizando eclipse y windows 8
  • Cambiar el color de fondo de CardView mediante programación
  • Crosswalk Cordova - js alerta muestra caracteres de bloque en la interfaz china android
  • Cómo establecer texto en un EditarTexto
  • IOS / Android desarrollo de plataforma cruzada
  • 3 Solutions collect form web for “Android ListView con múltiples selecciones y adaptadores personalizados”

    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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.