我正在开发一个允许用户在排练戏剧时创建笔记的应用程序。用户可以在列表视图中查看他们创建的笔记,并根据需要编辑和删除它们。
以用户创建 3 个笔记为例。在数据库中,row_id 将是 1、2 和 3。所以当用户在列表视图中查看注释时,它们也将按照 1、2、3 的顺序(在我增加值之前最初是 0、1、2) . 因此用户可以从数据库中查看和删除正确的行。
当用户决定删除笔记时,问题就出现了。假设用户删除了位置 2 的便笺。因此我们的数据库将具有 row_id 的 1 和 3。但在列表视图中,它们将位于位置 1 和 2。因此,如果用户单击列表视图中位置 2 的便笺它应该返回数据库中 row_id 为 3 的行。但是它会尝试查找不存在的 row_id 2 ,因此会崩溃。
鉴于用户在列表视图中的选择,我需要知道如何获取相应的 row_id。下面是执行此操作的代码:
// When the user selects "Delete" in context menu
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
switch (item.getItemId()) {
case DELETE_ID:
deleteNote(info.id + 1);
return true;
}
return super.onContextItemSelected(item);
}
// This method actually deletes the selected note
private void deleteNote(long id) {
Log.d(TAG, "Deleting row: " + id);
mNDbAdapter.deleteNote(id);
mCursor = mNDbAdapter.fetchAllNotes();
startManagingCursor(mCursor);
fillData();
// TODO: Update play database if there are no notes left for a line.
}
// When the user clicks on an item, display the selected note
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
viewNote(id, "", "", true);
}
// This is where we display the note in a custom alert dialog. I've ommited
// the rest of the code in this method because the problem lies in this line:
// "mCursor = mNDbAdapter.fetchNote(newId);"
// I need to replace "newId" with the row_id in the database.
private void viewNote(long id, String defaultTitle, String defaultNote,
boolean fresh) {
final int lineNumber;
String title;
String note;
id++;
final long newId = id;
Log.d(TAG, "Returning row: " + newId);
mCursor = mNDbAdapter.fetchNote(newId);
lineNumber = (mCursor.getInt(mCursor.getColumnIndex("number")));
title = (mCursor.getString(mCursor.getColumnIndex("title")));
note = (mCursor.getString(mCursor.getColumnIndex("note")));
.
.
.
}
如果您希望我再显示代码,请告诉我。这似乎很简单,但我找不到解决方案。
谢谢!
编辑
我解决了这个问题。我回答了下面的问题。