Sto utilizzando un BaseAdapter personalizzato per visualizzare gli elementi su un ListView. Gli elementi sono solo stringhe contenute in un ArrayList.Eliminazione di elementi da un ListView utilizzando un BaseAdapter personalizzato
Le voci di elenco hanno un pulsante di eliminazione su di esse (grande X rossa) e vorrei rimuovere l'elemento da ArrayList e notificare a ListView di aggiornarsi.
Tuttavia, ogni implementazione che ho provato ottiene numeri di posizione misteriosi dati ad esso, quindi per esempio facendo clic sul pulsante di eliminazione del secondo elemento si cancellerà l'elemento 5. Sembra essere quasi del tutto casuale.
Una cosa da notare è che gli elementi possono essere ripetuti, ma devono essere mantenuti nello stesso ordine. Ad esempio, posso avere "irlandese" due volte, come elementi 3 e 7.
Il mio codice è qui sotto:
private static class ViewHolder {
TextView lang;
int position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.language_link_row, null);
holder = new ViewHolder();
holder.lang = (TextView)convertView.findViewById(R.id.language_link_text);
holder.position = position;
final ImageView deleteButton = (ImageView)
convertView.findViewById(R.id.language_link_cross_delete);
deleteButton.setOnClickListener(this);
convertView.setTag(holder);
deleteButton.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.lang.setText(mLanguages.get(position));
return convertView;
}
ho poi tentativo di recuperare la posizione dell'elemento cancellato afferrando il tag, ma è sempre la posizione sbagliata nella lista. Non c'è un modello evidente nella posizione qui indicata, sembra sempre casuale.
// The delete button's listener
public void onClick(View v) {
ViewHolder deleteHolder = (ViewHolder) v.getTag();
int pos = deleteHolder.position;
...
...
...
}
sarei molto felice di eliminare solo l'elemento dalla ArrayList e hanno il ListView aggiornarsi, ma la posizione mi sto non è corretta, quindi non posso farlo.
Si prega di notare che ho fatto, in un primo momento, hanno il deleteButton clickListener all'interno del metodo GetView, e 'la posizione' utilizzato per eliminare il valore, ma ho avuto lo stesso problema.
Qualsiasi suggerimento apprezzato, questo mi irrita molto.
Brillante, grazie. Non posso credere di aver passato così tanto tempo in un problema così sciocco. Ho aggiunto la mia soluzione generale come risposta separata per gli interessati. – HXCaine