从Context Menu项获取价值(涉及数据库)

时间:2011-09-05 09:57:52

标签: android

我已经看到了几个解决方案,但非与我的例子严格相关。

我正在从xml文件创建contextmenu并从数据库填充ListView。

这是我的上下文菜单xml文件:

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="Revalue" android:id="@+id/expense_revalue"></item>
    <item android:title="Delete" android:id="@+id/expense_delete"></item>

</menu>

ListView数据填充方法:

private void fillData() {       

        ArrayList<HashMap<String, String>> myList = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map = new HashMap<String, String>();

        Cursor itemCursor = db.fetchAllItemsInExpenses();       

        if (itemCursor.moveToFirst()){
            do{
                String sCategory = itemCursor.getString(itemCursor.getColumnIndex(db.EXPENSE_CATEGORY));
                String sDate = itemCursor.getString(itemCursor.getColumnIndex(db.EXPENSE_DATE));
                String sValue = itemCursor.getString(itemCursor.getColumnIndex(db.EXPENSE_VALUE));

                map = new HashMap<String, String>();
                map.put(db.EXPENSE_CATEGORY, sCategory);
                map.put(db.EXPENSE_DATE, sDate);
                map.put(db.EXPENSE_VALUE, sValue);
                myList.add(map);                

            }while (itemCursor.moveToNext());           
        }

        SimpleAdapter expensesList = new SimpleAdapter(this, myList, R.layout.expenses_list_item, 
                new String[] {db.EXPENSE_CATEGORY, db.EXPENSE_DATE, db.EXPENSE_VALUE}, 
                new int[] {R.id.expense_category, R.id.expense_date, R.id.expense_value});
        setListAdapter(expensesList);
        //list.setAdapter(expensesList);


        //this.setListAdapter(new ArrayAdapter<String>(this, R.layout.expenses_list_category, category));

    }

我正在尝试做的是正确的删除方法(但我失败了,因为我无法获取与数据库匹配的ID,因此我可以删除记录)

我尝试了类似这样的东西,但是id不匹配(我正在用这种方式得到什么价值?)

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
    case R.id.expense_revalue:  
        return true;
    case R.id.expense_delete:           
        db.deleteItem(db.TABLE_EXPENSES, info.id);
        fillData();
        return true;
    }       
    return super.onContextItemSelected(item);
}

public boolean deleteItem(String tableName,long rowId) {
    return SQLDb.delete(tableName, KEY_ROWID + "=" + rowId, null)>0;
}

我需要的是与数据库中的id匹配的id ...我想

1 个答案:

答案 0 :(得分:0)

步骤1:使用CursorAdapter(可能是SimpleCursorAdapter)代替SimpleAdapter

第2步:没有第2步 - 假设info.id中包含Cursor

,您现有的_id逻辑应该有效

Here is a sample project演示从数据库填充ListView并使用上下文菜单。