Android ListView mit mehreren select-und benutzerdefinierten adapter

Ich habe eine ListView mit einem benutzerdefinierten adapter. Die ListView können mehrere wählen, aber irgendwie ist es nicht Anerkennung, wenn ein Element ausgewählt ist.

Hab ich schon gemacht und den adapter Gegenstände erweitern Überprüfbar, aber immer noch die getCheckedItemPositions()gibt ein array von falses.

Denke ich, es gibt etwas grundlegendes mache ich falsch, aber ich habe es nicht so weit zu finden, Beispiele von mehrfach-Auswahl-ListViews, wo der adapter wurde nicht einen ArrayAdapter verwenden Sie das Standard-layout für mehrere wählt.

Jede Hilfe wäre sehr geschätzt werden.

Code ist unten:

Main-Klasse:

listView = (ListView) findViewById(R.id.cardlist);

tca = new TextCardAdapter(mInflater);
listView.setAdapter(tca);

Adapter:

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;
}
}
Fand ich eine generische Methode zur Lösung Ihres Problems in einer ähnlichen stackoverflow Frage ( stackoverflow.com/questions/2652109/... ): marvinlabs.com/2010/10/custom-listview-ability-check-items
haben Sie keine Lösung gefunden für dieses problem?
Meine Lösung war schließlich, speichern Sie die Liste der CheckableCards, und beim abrufen aller geprüften Karten, die Iteration über die Liste und die Rückkehr der diejenigen, die zurückgegeben isChecked() als true.
schauen Sie sich diese Antwort, es kann helfen: stackoverflow.com/a/20171191/919216

InformationsquelleAutor Pingless | 2010-09-29

Schreibe einen Kommentar