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; } }
- Cómo obtener el identificador de elemento en un controlador onItemClick
- ¿Cómo evitar múltiples botones al mismo tiempo en android?
- ¿Por qué ButterKnife usa un DebouncingOnClickListener para los métodos de @OnClick?
- ¿Cómo desactivan otros botones cuando presiono el botón?
- Usando onClick en TextView con texto seleccionable - cómo evitar doble clic?
- Android OnClickListener no disparar para el botón en Layout independiente
- Acceder a objetos personalizados en una vista de lista
- Fragmento implementa OnClickListener
- OnClickListener de Child que impide el golpe de vista de Android ViewPager
- OnClickListener para CardView?
- Forma personalizada real del botón
- Diferente método para establecer OnClickListener de un botón en Android
- excepción java.lang.NoClassDefFoundError en algunos dispositivos
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); } }