Android ListView con più adattatore di selezione e personalizzazione

Ho un ListView con un adattatore personalizzato. Il ListView consente di select più, ma in qualche modo non riconosce quando viene selezionato un elemento.

Ho già fatto estendere gli elementi dell'adattatore Checkable, ma ancora getCheckedItemPositions() restituisce una serie di falses.

  • Come posso fare una schermata di un video, in android
  • È ansible utilizzare il metodo BitmapFactory.decodeFile per decodificare un'image dalla posizione http?
  • Installare manualmente Gradle e utilizzarlo in Android Studio
  • Differenza tra SOAP e KSOAP
  • Problemi di un cubo
  • Ottieni tutte le righe da SQLite
  • Suppongo che c'è qualcosa di fondamentale che sto facendo male, ma non sono riuscito a trovare esempi di ListViews multipli selezionati in cui la scheda non era un ArrayAdapter che utilizza il layout predefinito per più selezioni.

    Qualsiasi aiuto sarebbe molto apprezzato.

    Il codice è sotto:

    Classe principale:

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

    Adattatore:

     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; } } 

  • Android DevicePolicyManager locknow () non funziona in Lollipop
  • Richiesta HTTP per il file XML
  • Cordova Errore con Cordova-Android 6.2.0 - getFileResources non è una function
  • Emissione di bitmap di Android - Errore: fuori memory in una allocazione di 8294416 byte
  • Crea trigger utilizzando il database della stanza (Libreria di persistenza della stanza)
  • Imansible trovare informazioni sul provider per com.google.plus.platform
  • 3 Solutions collect form web for “Android ListView con più adattatore di selezione e personalizzazione”

    Basta fare una prova:

    1. listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    2. holder.checkbox.setFocusable(false);

    3. Penso che sia la visualizzazione di sottotitoli di listView che implementa l'interface Checkable, il che significa che la conversione convertita (convertView) dovrebbe avere tutto il metodo Checkable.

    Ho avuto un problema come questo una volta. Ha qualcosa a che fare con il fatto che hai una vista sull'adattatore che è selezionabile, causando che il genitore ignoralo. La rimozione consente di select nuovamente la row della list di elenco. Quello che hai creato è fondamentalmente un button su un button, android non piace così 🙁

    Ho avuto un problema simile. La mia voce di elenco è un RealativeLayout con un LinearLayout contenente un CheckBox e un TextView. No onItem … L'ascoltatore è stato chiamato finché non ho impostato il CheckBox.focusable su falso. Inoltre gli oggetti dell'adattatore non dovrebbero essere verificabili, ma le viste utilizzate come layout per l'elemento di elenco.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.