getTag () всегда пусто в onListItemClick - PullRequest
1 голос
/ 19 февраля 2012

У меня есть ListView, который я заполняю CursorAdapter следующим образом:

SimpleCursorAdapter.ViewBinder viewBinder = new SimpleCursorAdapter.ViewBinder() {
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
        if(columnIndex == cursor.getColumnIndex(MyTableColumns._ID))
        {
            view.setTag(cursor.getInt(columnIndex));
        }
        // some other stuff
    }
};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.my_item_renderer, cursor, from, to);
adapter.setViewBinder(viewBinder);

Цель состоит в том, чтобы получить идентификатор из элемента списка, по которому щелкнули:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    Object obj = v.getTag();
    int myId = Integer.parseInt(obj.toString());
}

Однако это всегда возвращает null.Что я пропускаю?Пока я просто использую скрытое текстовое поле, но я хотел бы знать, что я делал неправильно.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2012

Может быть, ваш оператор "if" просто возвращает false, и, следовательно, значение Tag не устанавливается?

0 голосов
/ 02 декабря 2012

onListItemClick() предоставляет вам представление, которое является строкой в ​​списке. ViewBinder привязывает значения к TextViews внутри этой строки. Таким образом, представление, которое вы называете setTag(), не совпадает с представлением, которое вы называете getTag().

Вы можете либо расширить SimpleCursorAdapter, чтобы вы могли вызвать setTag() в правильном представлении, либо вы можете получить первое дочернее представление v в onListItemClick() и получить его тег.

0 голосов
/ 19 февраля 2012

Вы пробовали это при настройке тега?

view.setTag(new Integer(cursor.getInt(columnIndex)));
...