我有一个数据库app.I想删除它后让每个项目从主屏幕消失。它会在长按后被删除,但在退出应用程序后再次进入后会变为不可见。那么,长按后如何立即从主屏幕上消失每个项目?
以下是我删除每个项目的代码段----
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
FriendsDbHelper fdb = new FriendsDbHelper(MainActivity.this);
SQLiteDatabase db = fdb.getWritableDatabase();
db.delete(TABLE_NAME,_ID+"=?",new String[]{Long.toString(id)});
return true;
}
});
答案 0 :(得分:1)
当你似乎使用光标适配器(,即你根据id 删除)时,你需要
swapCursor
或notifyDataSetChanged
方法。请注意!如果您没有使用光标适配器,那么您可能会 如果您使用传递给的 id ,则会遇到问题
setOnItemLongClickListener
方法,因为这不一定是 行的id但它与position的值相同。起初它 似乎工作但可能开始删除错误的行或 不删除任何行。
你的代码将是: -
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
FriendsDbHelper fdb = new FriendsDbHelper(MainActivity.this);
SQLiteDatabase db = fdb.getWritableDatabase();
db.delete(TABLE_NAME,_ID+"=?",new String[]{Long.toString(id)});
mycursor = fdb.your_method_to_get_the_cursor(); //<<<< will need changing
your_adapter.swapCursor(mycursor); //<<<< will need changing
return true;
}
});
// Get the ListView according to it's id
imagelist = (ListView) findViewById(R.id.imagelist);
// Get the Cursor
images = imgdbhlpr.getAllImages();
// Instantiate the Cursor Adapter
sca = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
images,
new String[]{ImgDBHelper.DSCR_COL},
new int[]{android.R.id.text1},
0
);
//
imagelist.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
imgdbhlpr.deleteImageRow(id);
images = imgdbhlpr.getAllImages();
sca.swapCursor(images);
return true;
}
});
imagelist.setAdapter(sca);
答案 1 :(得分:0)
您需要将其从listView中删除。您需要调用列表适配器,然后调用方法notifyDataSetChanged()