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 get attività recenti su Android "L"?
  • c ++ 11 problemi di multithreading con Android where alcuni thread non sono pianificati correttamente
  • BroadcastReceiver per scolbind le cuffie
  • Bluetooth non si connette a 4.4.2
  • Come configurare gradle per funzionare "offline" (utilizzando le dependencies memorizzate nella cache)
  • android in-app fatturazione - restoreTransactionInformation
  • 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; } } 

  • Rendere ImageView misura la width di CardView
  • come distriggersre la correzione dell'incantesimo in modo programmato in android
  • IllegalStateException: Imansible eseguire questa azione dopo onSaveInstanceState con ViewPager
  • La camera incorporata, utilizzando l'aggiunta di MediaStore.EXTRA_OUTPUT memorizza le immagini due volte (nella mia cartella e nell'impostazione predefinita)
  • Caricamento dell'animation della ruota di filatura
  • Gson - Nome stesso field, diversi tipi
  • 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.