getTag()在onListItemClick中始终为null

时间:2012-02-19 10:50:40

标签: android android-listview android-viewbinder

我有一个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);

目的是从列表项中获取ID:

@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 :(得分:0)

设置标签时是否尝试过此操作?

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

答案 1 :(得分:0)

也许你的“if”语句只返回false,因此没有设置Tag值?

答案 2 :(得分:0)

onListItemClick()为您提供了一个视图,该视图是列表中的行。 ViewBinder将值绑定到此行内的TextView。因此,您拨打setTag()的视图与您拨打getTag()的视图不同。

您可以扩展SimpleCursorAdapter,以便在正确的视图上调用setTag(),也可以在v中获取onListItemClick()的第一个子视图,并获取该标记。< / p>