I'm trying to delete items from a Recycler View, which I upload to a SQLite database. Selecting the "Delete" button deletes the record from the SQLite database, until it's all right, but it does not erase the element itself from the Recycler View.
This is my delete method () created in my DataBase class:
public String eliminar(String Nombre){
String mensaje ="";
SQLiteDatabase db = this.getWritableDatabase();
int cantidad = db.delete("pets", "nombre='" + Nombre + "'", null);
if (cantidad != 0){
mensaje = "Eliminado correctamente";
}
else{
mensaje = "No hay registros que eliminar";
}
return mensaje;
}
And this is what my "Delete" button does in my RecyclerViewAdapter class:
bnBorrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BaseDeDatos db = new BaseDeDatos(context);
String Nombre = nombre.getText().toString();
String mensaje = db.eliminar(Nombre);
Toast.makeText(context, mensaje, Toast.LENGTH_SHORT).show();
}
});
To be clear, I leave an image of an element loaded in my RecyclerView, which should disappear when I press the "DELETE" button:
Thank you very much!
EDITED
Recycler Class:
public class RecyclerViewEnganche extends RecyclerView.Adapter<RecyclerViewEnganche.ViewHolder> {
private ArrayList<PetsActivity> mExampleList;
private OnItemClickListener mListener;
List<PetsActivity> data;
public void update(ArrayList<PetsActivity> datas){
data.clear();
data.addAll(datas);
notifyDataSetChanged();
}
public interface OnItemClickListener extends View.OnClickListener {
void onDeleteClick(int position);
}
public void setOnItemClickListener(View.OnClickListener listener) { mListener = (OnItemClickListener) listener; }
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView nombre, edad, raza, alergia;
public String id, reserva;
public Button bnCuidados, bnBorrar;
Context context;
public ViewHolder(View v, final OnItemClickListener listener) {
super(v);
context = v.getContext();
nombre = v.findViewById(R.id.tveNombre);
edad = v.findViewById(R.id.tveEdad);
raza = v.findViewById(R.id.tveRaza);
alergia = v.findViewById(R.id.tveAlergia);
bnCuidados = v.findViewById(R.id.bnCuidados);
bnBorrar = v.findViewById(R.id.bnBorrar);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null){
int position = getAdapterPosition();
if(position != RecyclerView.NO_POSITION){
listener.onDeleteClick(position);
}
}
}
});
}
void setOnClickListeners() {
bnCuidados.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ElegirCuidados.class);
intent.putExtra("id", id);
intent.putExtra("reserva", reserva);
context.startActivity(intent);
}
});
bnBorrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BaseDeDatos db = new BaseDeDatos(context);
String Nombre = nombre.getText().toString();
String mensaje = db.eliminar(Nombre);
Toast.makeText(context, mensaje, Toast.LENGTH_SHORT).show();
}
});
}
}
public List<Pets> listaPets;
public RecyclerViewEnganche(List<Pets> listaPets) {
this.listaPets = listaPets;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.itempets,parent,false);
ViewHolder viewHolder=new ViewHolder(view, null);
// view.setOnClickListener(this);
return new ViewHolder(view, null);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.nombre.setText(listaPets.get(position).getNombre());
holder.edad.setText("Edad: " + listaPets.get(position).getEdad());
holder.raza.setText("Raza: " + listaPets.get(position).getRaza());
holder.alergia.setText("Alergias: " + listaPets.get(position).getAlergia());
holder.reserva = listaPets.get(position).getReserva();
holder.setOnClickListeners();
}
@Override
public int getItemCount() {
return listaPets.size();
}
}
Main Class:
public class PetsActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerViewEnganche enganchePet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pets);
recyclerView = findViewById(R.id.rvPets);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
BaseDeDatos tablaPets = new BaseDeDatos(getApplicationContext());
enganchePet = new RecyclerViewEnganche(tablaPets.mostrarPets());
recyclerView.setAdapter(enganchePet);
enganchePet.setOnItemClickListener(new RecyclerViewEnganche.OnItemClickListener(){
@Override
public void onClick(View v) {
}
@Override
public void onDeleteClick(int position) {
removeItem(position);
}
});
}
private void removeItem(int position) {
enganchePet.notifyItemRemoved(position);
}
}