【发布时间】:2019-10-27 00:04:27
【问题描述】:
我想从数据库中删除列表视图项,如何正确链接每个列表项及其数据库项?
我已经尝试删除 _id 是列表位置的位置,但每次都无法正常工作。
这是我在适配器类上实现侦听器的 viewholder 类和 getView 方法
private class ViewHolder{
ImageView imageView;
TextView nom;
Button actualizar,borrar;
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
View fila=view;
ViewHolder holder=new ViewHolder();
if(fila==null)
{
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
fila=inflater.inflate(layout,null);
holder.imageView=fila.findViewById(R.id.imagencoche);
holder.nom=fila.findViewById(R.id.nombreCoche);
holder.actualizar=fila.findViewById(R.id.btnAct);
holder.borrar=fila.findViewById(R.id.btnBorrar);
holder.borrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyOpenHelper db=new MyOpenHelper(context);
db.borrarCoche(position+1+"");
lista=db.selectCoches();
notifyDataSetChanged();
}
});
fila.setTag(holder);
}
else{
holder=(ViewHolder)fila.getTag();
}
Coche coche=lista.get(position);
holder.nom.setText(coche.getNombre());
holder.imageView.setImageBitmap(coche.getFoto());
return fila;
}
从 SQLite 助手调用的 2 方法
public void borrarCoche(String id)
{
String where="_id=?";
SQLiteDatabase db=this.getWritableDatabase();
db.delete("coches",where,new String[]{id});
}
public ArrayList<Coche> selectCoches(){
ArrayList<Coche> lista =new ArrayList<Coche>();
SQLiteDatabase db=this.getReadableDatabase();
Cursor c =db.rawQuery("SELECT nombre, foto, longitud, latitud,_id from coches", null);
if (c.moveToFirst()){
do {
//recogemos valores
String nom = c.getString(0);
byte[] foto = c.getBlob(1);
float longitud = c.getFloat(2);
float latitud = c.getFloat(3);
int id = c.getInt(4);
Coche coche = new Coche(id, longitud, latitud, DbBitMapUtility.getImage(foto), nom);
lista.add(coche);
}while(c.moveToNext());
}
return lista;
}
它并不总是正常工作,有时它会擦除另一个条目,或者当只剩下 2 或 1 个时它不会擦除任何内容。
【问题讨论】:
标签: java android sqlite listview