Ho creato un ListView personalizzato estendendo SimpleCursorAdapter. Il risultato è IMAGE + CheckedTextView (Text + Checkbox).Android Fare clic sulla listaI controlli di verifica errati
Quando faccio un clic lungo su un elemento, tutto funziona correttamente: ottengo l'ID corretto e i dettagli dell'elemento selezionato.
Il problema si verifica quando si tenta di contrassegnare un elemento come selezionato ma si verifica la casella di controllo errata.
Ad esempio: Ho 9 elementi sulla mia lista, ordinati 1-9. se faccio clic su listItem 1, la casella di controllo sulla riga 9 viene controllata. se faccio clic sull'elemento 4, la casella di controllo sulla linea 6 viene controllata e se faccio clic sulla linea centrale, viene controllata.
Chiaramente mi manca qualcosa qui :) Ricordare quando faccio un lungo clic sulla riga (menu contestuale apre), tutto funziona alla grande.
Questa è l'ascoltatore:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView markedItem = (CheckedTextView) view.findViewById(R.id.btitle);
if (!markedItem.isChecked()) {
markedItem.setChecked(true);
} else {
markedItem.setChecked(false);
}
}
});
Apprezzo tutto l'aiuto!
Fammi sapere Se hai bisogno di me per pubblicare più codice.
Grazie!
btw, se clicco su più di uno ... la festa continua ... nessun ordine ovvio ...
EDIT: il codice adattatore
public class ImageCursorAdapter extends SimpleCursorAdapter {
private Cursor c;
private Context context;
private String url;
private TextView bUrl;
public ImageCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
this.c = c;
this.context = context;
}
public View getView(int pos, View inView, ViewGroup parent) {
View v = inView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.image_list, null);
}
this.c.moveToPosition(pos);
final TextView bTitle = (TextView) v.findViewById(R.id.btitle);
String bookmark = this.c.getString(this.c.getColumnIndex(Browser.BookmarkColumns.TITLE));
byte[] favicon = this.c.getBlob(this.c.getColumnIndex(Browser.BookmarkColumns.FAVICON));
if (favicon != null) {
ImageView iv = (ImageView) v.findViewById(R.id.bimage);
iv.setImageBitmap(BitmapFactory.decodeByteArray(favicon, 0, favicon.length));
}
bTitle.setText(bookmark);
return (v);
}
}
Mostraci il tuo adattatore – Falmarri
domanda modificata. Grazie. –
stai registrando il valore di posizione nel listener? Hai altri ascoltatori? – Jim