Reputation: 163
I created a ListView
with a CursorAdapter
, populated by a table of my db. After I added a ContextMenu
that with a long click on the desired line of ListView
pick info from my table.
The problem is that: I can not collect the information of that single line of ListView
, each line gives me the same result. I think I do something wrong in query.
onCreate
:
private void createTabRegistry(SQLiteDatabase db)
{
String sql = "CREATE TABLE {0} ({1} INTEGER PRIMARY KEY AUTOINCREMENT, {2} TEXT,{3} INTEGER,{4} TEXT,{5} TEXT,{6} TEXT, {7} TEXT);";
db.execSQL(MessageFormat.format(sql, TabRegistry.TABLE_NAME, TabRegistry._ID,TabRegistry.TYPE, TabRegistry.DATE, TabRegistry.STATUS, TabRegistry.NUMBER, TabRegistry.MESSAGE, TabRegistry.OTHER));
}
My query in db class:
public Cursor getRegistry2(long id) {
return (getReadableDatabase().query(
TabRegistry.TABLE_NAME,
TabRegistry.COLUMNS,
TabRegistry._ID + " = " + id,
null,
null,
null,
null,
null));
}
id of ContextMenu
in my activity:
AdapterView.AdapterContextMenuInfo info= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
id = getListAdapter().getItemId(info.position);
My cursor in the activity class:
Cursor c3 = databaseHelper.getRegistry2(id);
if (c3 != null) {
c3.moveToFirst();
}
dbnumber = (c3.getString(c3.getColumnIndex(TabRegistry.NUMBER)));
How do I assign to dbnumber
string the value of the line of ListView
that wonder?
EDIT code that works, but reset the view of listview....
Cursor c3 = (Cursor) getListAdapter().getItem(info.position);
startManagingCursor(c3);
aaaaa = c3.getString(c3.getColumnIndex(TabRegistry.NUMBER));
c3.close();
Upvotes: 1
Views: 1000
Reputation: 87064
AdapterView.AdapterContextMenuInfo
has a field called id
that represents the row id from the database of that selected row. You'll want to query for that id and not the position
field that represents the position in the list:
rowId = info.id;
and then query your database for the rowId
to get that item's data.
Edit:
You'll probably don't want to use the solution you added. You close the cursor so no more data(that is why you have to restart the activity, as you probably query the database only in the onCreate
method).
I told you the check if info.id
returns different values when you use long press(to show the ContextMenu
) different rows in the list, that means that the ContextMenu
(probably) selects different row ids for different rows).
I don't know what causes your issue(if the delete works I would say there is something in the activity), so I made a small example of what you are trying to do so you can see this type of code:
Upvotes: 2