Android-Klicken Sie auf den Listeneintrag prüft, falsche checkbox

Ich habe eine custom ListView durch die Erweiterung SimpleCursorAdapter.
Das Ergebnis ist BILD + CheckedTextView (Text + Links).

Wenn ich lange auf ein Element, funktioniert auch alles Prima - ich bekomme die richtige ID und die details des angeklickten Elements.

Tritt das problem auf, wenn ich versuche, markieren Sie ein Element als überprüft, überprüft dabei aber die falsche checkbox.

Zum Beispiel: ich habe 9 Punkte auf meiner Liste, sortiert 1-9. wenn ich auf listItem-1, das Kontrollkästchen in Zeile 9 wird geprüft. wenn ich auf Punkt 4, können Sie das Feld in Zeile 6 wird geprüft, wenn ich auf der mittleren Linie, es wird geprüft.

Klar bin ich etwas fehlt hier 🙂
Erinnern Sie sich daran, wenn ich lange auf die Zeile klicken (Kontextmenü öffnet sich), alles funktioniert Super.

Dies ist dem Hörer:

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

            }
        });

Jede Hilfe dankbar!

Lassen Sie mich wissen, Wenn Sie mich brauchen, um mehr zu schreiben code.

Danke!

btw, Wenn ich auf mehr als eine... die PARTY geht weiter... keine offensichtliche Ordnung...

EDIT: der Adapter-code

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);
    }
}
  • Zeigen Sie uns Ihre adapter
  • bearbeitete Frage. Danke.
  • sind Sie auf der Anmeldung den Wert position in den Hörer? Haben Sie andere Zuhörer?
  • Nein 🙁 und ich habe noch ein listener für einen button, aber es ist nicht mit der listView. aber ich fügte hinzu, ein toast, nur um zu sehen, was für eine position angeklickt wird und zu meiner überraschung, es ist die richtige position. wenn ich klickte auf listItem 2 es zeigte sich, position 2 und so weiter... komisch. Wenn Sie erwähnten es ich es erwartet zeigen die falsche position...
  • Die Möglichkeit, dass der Checkboxen ist irgendwie in umgekehrter Reihenfolge zu der Liste?
  • Vielleicht post-layout code für die Zeile layouts (image_list.xml) als gut?
  • Ich sehe nicht ein besonderes problem, aber ich Wette, es hat zu tun mit ListView-Ansichten wiederverwenden. Auch, warum sind Sie aufblasen Dinge yoruself in getView, statt super Griff der Ansicht Schöpfung?
  • Mayra vielen Dank für die Beantwortung noch einmal! 🙂 Ich werde überprüfen, Ihre beiden Vorschläge.

InformationsquelleAutor Lior Iluz | 2010-10-24
Schreibe einen Kommentar