Доступ к значениям SQLite из SimpleCursorAdapter - PullRequest
0 голосов
/ 02 мая 2011

У меня есть таблица SQLite под названием «Узлы» с набором всех узлов (каждый узел имеет несколько свойств).

В упражнении я использую расширение SimpleCursorAdapter для отображения подмножества таблицы Nodes на основе запроса SQL, передавая ему курсор над таблицей результатов (из запроса).

{id_long, name_string, description_string, nodetype_enum_toString...}
    1, "home", "home_desc", "cool"
    2, "item1", "item1_desc", "warm"
    3, "item2", "item2_desc", "hot"
    4, "item3", "item3_desc", "warm"
    5, "item4", "item4_desc", "hot"

Я хочу изменить каждый из элементов списка в моей ListActivity так, чтобы он отображал разные цвета в зависимости от того, является ли элемент прохладным, теплым или горячим. У меня маленький (пустой) вид, но он всегда по умолчанию белый (часть else).

public View getView(int position, View convertView, ViewGroup parent) {
    convertView = super.getView(position, convertView, parent);

    if (convertView == null) convertView = View.inflate(mContext, R.layout.viewstack_item, null);
    View nodetype_view = (View) convertView.findViewById(R.id.nodetype_view);

    mGenCursor_cur = mDataHelper_db.getAll();
    mGenCursor_cur.moveToPosition(position);

    Log.i("test", "node type key " + mGenCursor_cur.getColumnIndex(DataHelper.NODES_TYPE_KEY));
    String type_nt = mGenCursor_cur.getString(mGenCursor_cur.getColumnIndex(DataHelper.NODES_TYPE_KEY));
    String name_str = mGenCursor_cur.getString(mGenCursor_cur.getColumnIndex(DataHelper.NODES_NAME_KEY));
    Log.i("getView", title_str + "typeis " + type_nt + " at position " + position);

    if (prio_np.equals(NodePrio.HIGH.toString())) {
        Log.i("prio_np", "high red");
        prioView_view.setBackgroundColor(Color.RED);
    } else if (prio_np.equals(NodePrio.NORMAL.toString())) {
        Log.i("prio_np", "norm magenta");
        prioView_view.setBackgroundColor(Color.MAGENTA);
    } else {
        Log.i("prio_np", "else (low) white");
        prioView_view.setBackgroundColor(Color.WHITE);
    }

    mGenCursor_cur.close();
    bindView(convertView, mContext, getCursor());
    return(convertView);
}

Моя проблема в том, что, хотя курсор, переданный в SimpleListAdapter, будет содержать _ID (я предполагаю) соответствующих узлов в подмножестве, которое я хочу, параметр position в getView равен локально для подмножества, поэтому я не могу сопоставить его с таблицей узлов. Я скучаю по какой-то простой технике?

Как всегда, любая помощь приветствуется.

Комментарий 4 отмеченного ответа помог мне решить эту проблему: сохраняя курсор, который был передан SimpleCursorAdapter как переменную-член, затем используя move to position и getLong:

mCursor_cur.moveToPosition(position);
long id = mCursor_cur.getLong(0);

, где position - это локальный параметр в методе getView (), а 0 используется для getLong, поскольку db_id - это первый столбец в курсоре, переданном в SimpleCursorAdapter

1 Ответ

1 голос
/ 02 мая 2011

в Java == не должны использоваться для сравнения строк string1.equals(string2) это то, что вы ищете см. здесь для получения дополнительной информации

...