Cómo quitar un elemento seleccionado de ListView utilizando CursorAdapter

Estoy usando CursorAdapter y abajo es mi clase del adaptador. Mi lista consta de dos vistas de texto y un botón en cada fila. Ahora, al hacer clic en el botón, quiero eliminar el elemento seleccionado de la lista, así como de la base de datos. Cómo puedo conseguir el id del artículo seleccionado de la base de datos de modo que pueda suprimirlo y después notificar al adaptador (actualice 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; } } 

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

Im suponiendo que este ID está en el cursor. A continuación, simplemente haga su propia clase DeleteEntryOnClicklistener que implementa OnClickListener y dejar que tome el ID en su constructor, y elimina la entrada cuando se hace clic.

Por favor, comente si he malinterpretado su problema o si no estoy claro, saludos 🙂

editar:

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

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

Y DeleteEntryOnClicklistener debe 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); } } 
  • Capturar LinearLayout eventos onClick con ImageButton dentro de él
  • Cómo configurar OnClickListener para ScrollView?
  • "Presione y mantenga presionado" en Android necesita cambiar estados (selector XML personalizado) usando onTouchListener
  • Obtener coordenadas haciendo clic en el mapa (openstreetmaps)
  • Agregue el listener de clics al Generic RecyclerView Adapter
  • Usando un bucle para establecer los botones enclicklistener
  • Cómo utilizar el método onClickListener de Button en un ListView
  • Parámetro de vista de Android para el método OnClickListener
  • ¿Cómo configurar onClickListener para partes separadas de la lista personalizada?
  • Ajuste del valor de la variable global en el botón
  • método no sobrescribe el método de su superclase. Fragmento Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.