Frage

Ich verwende CursorAdapter und unten ist meine Adapterklasse.Meine Liste besteht aus zwei Textansichten und einer Schaltfläche in jeder Zeile.Jetzt möchte ich mit einem Klick auf die Schaltfläche das ausgewählte Element sowohl aus der Liste als auch aus der Datenbank löschen.Wie kann ich die ID des ausgewählten Elements aus der Datenbank abrufen, um es zu löschen und dann den Adapter zu benachrichtigen (Liste aktualisieren).

public class MyAdapter extends CursorAdapter {

    Cursor c;
    LayoutInflater inflater;
    Context context;
    private String TAG = getClass().getSimpleName();

    public MyAdapter(Context context, Cursor c) {
        super(context, c);
        this.c = c;
        this.context = context;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public void bindView(View view, Context context, final Cursor cursor) {

        TextView txtName = (TextView) view.findViewById(R.id.txt_name);
        txtName.setText(cursor.getString(cursor.getColumnIndex(Helper.tbl_col_username)));
        TextView txtPassword = (TextView) view.findViewById(R.id.txt_password);
        txtPassword.setText(cursor.getString(cursor.getColumnIndex(Helper.tbl_col_password)));

        Button button = (Button) view.findViewById(R.id.btn_delete);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                Log.d(TAG, "Button Click ");
            }
        });
    }
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View v = inflater.inflate(R.layout.row, null); 
        return v;
    }
}

War es hilfreich?

Lösung

Versuchen Sie Folgendes:

@Override
public void bindView(View view, Context context, final Cursor cursor) {

    TextView txtName = (TextView) view.findViewById(R.id.txt_name);
    txtName.setText(cursor.getString(cursor.getColumnIndex(Helper
                                                           .tbl_col_username)));
    TextView txtPassword = (TextView) view.findViewById(R.id.txt_password);
    txtPassword.setText(cursor.getString(cursor.getColumnIndex(Helper
                                                           .tbl_col_password)));

    final String itemId = cursor.getString(cursor.getColumnIndex("id"));

    Button button = (Button) view.findViewById(R.id.btn_delete);
    button.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            Log.d(TAG, "Button Click ");
            deleteRecordWithId(itemId);
            cursor.requery();
            notifyDataSetChanged();
        }
    });
}

Andere Tipps

Ich gehe davon aus, dass sich diese ID im Cursor befindet.Erstellen Sie dann einfach Ihre eigene Klasse DeleteEntryOnClicklistener, die OnClickListener implementiert, und lassen Sie die ID in ihrem Konstruktor übernehmen und löschen Sie den Eintrag, wenn Sie darauf klicken.

Bitte kommentieren Sie, wenn ich Ihr Problem missverstanden habe oder wenn ich unklar bin, Prost :)

bearbeiten:

Ändern Sie in Ihrem bindView() den OnClicklistener wie folgt:

long id = cursor.getLong(cursor.getColumnIndex(Helper.tbl_col_id));
button.setOnClicklistener(new DeleteEntryOnClicklistener(id));

Und DeleteEntryOnClicklistener sollte ungefähr so aussehen:

public class DeleteEntryOnClicklistener implements View.OnClickListener {

    long id;

    public DeleteEntryOnClicklistener(long id) {
        this.id = id;
    }

    @Override
    public void onClick(View v) {
        database.deleteEntry(id);
    }

}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top