从数据库中删除数据后,我需要一些清理listview的解决方案。我意识到我可以通过以下活动功能从数据库中删除数据:
helper.delete(String.valueOf(editID));
adapter.notifyDataSetChanged();
break;
在我的DBHelper中:
public void delete(String id) {
String[] args = {id};
getWritableDatabase().delete(TABLE_NAME, "_ID=?", args);
getWritableDatabase().close();
此代码用于删除数据库和项目,adapter.notifyDataSetChanged();
但是listView只在我关闭应用程序时刷新,然后再次打开它。我需要一种如何立即刷新listView的方法。有些人使用adapter.remove(position);
,立即刷新,然后拨打.notifyDataSetChanged();
。但它不适用于我的自定义适配器。
我使用过这种适配器:
class ListAdapter extends CursorAdapter{
@SuppressWarnings("deprecation")
ListAdapter(Cursor c){
super(MainActivity.this, c);
}
@Override
public void bindView(View row, Context ctxt, Cursor c) {
// TODO Auto-generated method stub
ListHolder holder = (ListHolder)row.getTag();
holder.populateFrom(c, helper);
}
@Override
public View newView(Context ctxt, Cursor c, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.custom_listview, parent, false);
ListHolder holder = new ListHolder(row);
row.setTag(holder);
return (row);
}
}
static class ListHolder {
private TextView nama = null, kategori=null;
private ImageView icon=null;
private View row = null;
ListHolder(View row){
this.row=row;
nama=(TextView)row.findViewById(R.id.main_title_name);
kategori=(TextView)row.findViewById(R.id.sub_title_name);
icon=(ImageView)row.findViewById(R.id.thumbnail);
}
void populateFrom(Cursor c, DBHelper helper){
nama.setText(helper.getNamaLok(c));
kategori.setText(helper.getKatgLok(c));
byte[] byteArray = helper.getImglok(c);
Bitmap bm = BitmapFactory.decodeByteArray(byteArray, 0 ,byteArray.length);
icon.setImageBitmap(bm);
}
}
抱歉我的英语不好,而且...... 希望有办法解决这个问题..提前谢谢。
答案 0 :(得分:0)
您需要以正确的方式使用.notifyDataSetChanged();
。
请记住,方法.notifyDataSetChanged()
表示适配器数据已更改且您需要刷新。
通知附加的观察者基础数据已被更改,反映数据集的任何视图都应自行刷新。
所以你需要做的就是更改数据集然后notify
更改为适配器。
对于CussorAdapter
,数据集为cursor
,因此您应该将光标更改为以下方式:
changeCursor(Cursor cursor)
更改为新光标。也许this Link会对您有所帮助。