从ListAdapter的行ID获取ListView项ID

时间:2011-07-11 04:49:05

标签: android sqlite listview listadapter simplecursoradapter

我正在尝试创建从数据库查询的项目的单选(例如,单选按钮)列表。要使用当前选定的行,我需要使用ListView的getCheckedItemPosition()setItemChecked()方法。

我的ListView设置了SimpleCursorAdapter。当我检索当前选择的项目时,我从数据库中获得了行ID ,我需要使用它来查找相应的项目并手动将其设置为通过上述方法选择。换句话说,我需要将行ID的状态映射到必然的单调行ID(因为setItemChecked()方法接受位置ID,而不是数据库行ID,并且在我的数据库中我可以删除项目)。

那么有没有办法从表格行ID中获取位置ID?如果可能的话,我宁愿不去寻求搜索。

感谢。

1 个答案:

答案 0 :(得分:4)

我最后创建了一个简单的方法来搜索所有项目(假设它们按顺序排列):

/**
 * Since Android apparently provides no way to do this, do a simple binary
 * search for the item position based on its row id.
 * @param adapter    The adapter to use
 * @param row    The rowId to search for
 * @param left
 * @param right
 * @return    Position, or -1 if not found
 */
public int getPositionFromRowId(ListAdapter adapter, long row, int left, int right) {
    if (left > right)
        return -1;
    int middle = (left + right) / 2;
    if (adapter.getItemId(middle) == row)
        return middle;
    if (adapter.getItemId(middle) > row)
        return getPositionFromRowId(adapter, row, left, middle - 1);
    else
        return getPositionFromRowId(adapter, row, middle + 1, right);
}

编辑:通过执行以下操作来使用此代码:

getPositionFromRowId(myListAdapter, row, 0, myListAdapter.getCount());