1

データベースから照会されるアイテムの単一選択(ラジオボタンなど)リストを作成しようとしています。現在選択されている行を操作するには、ListViewのgetCheckedItemPosition()andメソッドを使用する必要があります。setItemChecked()

セットのあるがありますListViewSimpleCursorAdapter現在選択されているアイテムを取得すると、データベースからその行IDが取得されます。これを使用して適切なアイテムを検索し、前述の方法で選択するように手動で設定する必要があります。つまり、行IDのステータスを必然的に単調な行IDにマップする必要があります(setItemChecked()メソッドはデータベースの行IDではなく位置IDを受け入れ、データベースではアイテムを削除できるため)。

それで、テーブルの行IDから位置IDを取得する方法はありますか?可能であれば、検索を行うことに頼りたくありません。

ありがとう。

4

1 に答える 1

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());
于 2011-07-11T17:40:32.003 に答える