У меня возникла проблема с обновлением карт в списке при удалении или редактировании одного вида карты, я пробовал с .notifyDataSetChanged()
, но не работал. Я действительно новичок в Android Studio.Устранение неполадок списка после удаления элемента в Android Studio
Вот мой код:
RegistroActivity
public class RegistroActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
private List<Registro> items = new ArrayList<>();
private RegistroAdapter registroAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registro);
RegistroModel registroModel = new RegistroModel();
Cursor query = registroModel.showReg(HomeActivity.database);
if (query.moveToFirst()) {
do {
Registro expense = new Registro(query.getInt(0), query.getString(1), query.getFloat(2), query.getFloat(3), query.getString(4), query.getString(5));
items.add(expense);
} while (query.moveToNext());
}
recyclerView = (RecyclerView) findViewById(R.id.recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setPadding(8, 8, 8, 8);
recyclerView.setLayoutManager(new GridLayoutManager(getApplicationContext(), 2));
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
adapter = new RegistroAdapter(items);
recyclerView.setAdapter(adapter);
}
}
заполняют данные из модели с простой SELECT * FROM, а также передавать данные к адаптеру. Вот мой адаптер:
public class RegistroAdapter extends RecyclerView.Adapter<RegistroAdapter.RegistroViewHolder> {
private List<Registro> items;
public static class RegistroViewHolder extends RecyclerView.ViewHolder {
public ImageView color;
public TextView descr;
public TextView precio;
public TextView cantidad;
public ImageButton delete_expense;
public ImageButton edit_expense;
public Context cont;
public RegistroViewHolder(View v, Context context) {
super(v);
color = (ImageView) v.findViewById(R.id.card_image);
descr = (TextView) v.findViewById(R.id.description);
precio = (TextView) v.findViewById(R.id.precio);
cantidad = (TextView) v.findViewById(R.id.cantidad);
delete_expense = (ImageButton) v.findViewById(R.id.delete_button);
edit_expense = (ImageButton) v.findViewById(R.id.edit_button);
cont = context;
}
}
public RegistroAdapter(List<Registro> items) {
this.items = items;
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public RegistroViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.registro_card, viewGroup, false);
return new RegistroViewHolder(v, viewGroup.getContext());
}
//
@Override
public void onBindViewHolder(RegistroViewHolder viewHolder, final int i) {
String gramos = viewHolder.cont.getResources().getString(R.string.gramos);
String fecha = viewHolder.cont.getResources().getString(R.string.fecha);
String desc = viewHolder.cont.getResources().getString(R.string.tvDesc);
viewHolder.color.setImageResource(R.color.fondoCard);
viewHolder.descr.setText(fecha + " " + items.get(i).getDate() + "\n" + "\n" + " " + items.get(i).getDesc());
viewHolder.precio.setText(items.get(i).getPrice().toString() + " " + items.get(i).getMoneda());
viewHolder.cantidad.setText(items.get(i).getAmount().toString() + " " + gramos );
viewHolder.edit_expense.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), EditRegistroActivity.class);
int pos = items.get(i).getId();
intent.putExtra("position", pos);
v.getContext().startActivity(intent);
}
});
viewHolder.delete_expense.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
int pos = items.get(i).getId();
try{
SQLiteDatabase conn = HomeActivity.database.getWritableDatabase();
int n = conn.delete("registro","id="+pos, null);
if (n == 1){
Toast.makeText(v.getContext(), v.getContext().getString(R.string.mensajeEliminarexito), Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(v.getContext(),v.getContext().getString(R.string.mensajeErrorEliminar) , Toast.LENGTH_SHORT).show();
}
}catch (Exception e){
Toast.makeText(v.getContext(), "Error. ID=" + e.toString(), Toast.LENGTH_SHORT).show();
}
}
});
}
}
Я установил данные внутри элементов в карточной зрения, эта карта вида имеет два изображения-кнопки для удаления и редактирования каждого элемента в карточной зрения , Я установил для них onClickListener. Он полностью редактирует и удаляет, но не обновляет информацию.