Estoy usando CursorAdapter y la de abajo es mi adaptador de clase. Mi lista se compone de texto de dos vistas y un botón en cada fila. Ahora, haga clic en el botón que desea eliminar el elemento seleccionado de la lista, así como de la base de datos. ¿Cómo puedo obtener el id del elemento seleccionado de la base de datos para que yo pueda eliminar y, a continuación, notificar el adaptador (actualización de la lista).

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;
    }
}
Como por su listview se unen con el cursor y si está administrando el cursor con la actividad, a continuación, en onListItemClick le da el _ID que desea, pero aquí se está tratando de conseguir un _ID en el botón de clic en bindView entonces usted tiene que buscar el ID antes del su del botón haga clic con el _ID nombre de la columna y pásalo a tus click del botón, y usarlo.. 🙂

OriginalEl autor Lalit Poptani | 2011-12-07

2 Comentarios

  1. 12

    Intentar algo como esto :

    @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();
            }
        });
    }
    cursor.requery() es obsoleto ahora

    OriginalEl autor viv

  2. 2

    Im suponiendo este ID se encuentra el cursor. Luego, simplemente haga su propia clase DeleteEntryOnClicklistener que implementa OnClickListener y se deja tomar el ID de su constructor, y elimina la entrada cuando se hace clic.

    Por favor comente si he malinterpretado tu problema o si estoy siendo claro, saludos 🙂

    edición:

    En su bindView(), cambiar el OnClicklistener a algo como esto:

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

    Y DeleteEntryOnClicklistener debería ser algo como esto:

    public class DeleteEntryOnClicklistener implements View.OnClickListener {
    
        long id;
    
        public DeleteEntryOnClicklistener(long id) {
            this.id = id;
        }
    
        @Override
        public void onClick(View v) {
            database.deleteEntry(id);
        }
    
    }
    sí, mi id es en el cursor y quiero recuperar el id del elemento que está seleccionado, entonces, ¿cómo hacer eso.
    He editado mi respuesta un poco, tal vez es un poco más claro ahora cómo me imaginaba el código.
    hmmm que parece estar bien, ¿cómo volver a llenar la lista o actualizar la lista?
    bien puede ser que se me ocurrió un par de años más tarde, pero el prolem con la solución anterior es que cuando una vez que se elimina una fila de la listview, sus cambios de posición. pero su id de columna en la base de datos no se como es autoincrement

    OriginalEl autor pgsandstrom

Dejar respuesta

Please enter your comment!
Please enter your name here