【问题标题】:getTag() always null in onListItemClickonListItemClick 中的 getTag() 始终为空
【发布时间】:2012-03-10 01:12:06
【问题描述】:

我有一个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。我在看什么?现在我只是在使用一个隐藏的文本字段,但我想知道我做错了什么。

【问题讨论】:

    标签: android android-listview android-viewbinder


    【解决方案1】:

    你在设置标签的时候试过这个吗?

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

    【讨论】:

      【解决方案2】:

      也许您的“if”语句只是返回 false,因此没有设置任何标记值?

      【讨论】:

      • 好点,但我只是没有在代码 sn-p 中包含它,我在实际项目中返回 true。
      【解决方案3】:

      onListItemClick() 为您提供列表中的行视图。 ViewBinder 将值绑定到该行内的 TextViews。因此,您调用setTag() on 的视图与您调用getTag() on 的视图不同。

      您可以扩展 SimpleCursorAdapter 以便在正确的视图上调用 setTag(),或者您可以在 onListItemClick() 中获取 v 的第一个子视图并获取它的标签。

      【讨论】:

        猜你喜欢
        • 2019-11-08
        • 2015-12-10
        • 2011-10-13
        • 2021-09-01
        • 2021-05-05
        • 2019-02-16
        • 2016-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多