在CursorAdapter中保存URI / id

时间:2012-01-12 10:32:30

标签: android android-contentprovider

我有一个提供内容的ContentProvider,例如过滤器。 这些将在ListView中呈现。因为过滤器有许多字段,我需要为列表项创建自己的视图。这些字段映射到扩展CursorAdapter的类中。

public void bindView(View view, Context context, Cursor cursor) {

    TextView searchPattern = (TextView) view.findViewById(R.id.tv_searchpattern);
    TextView searchType = (TextView) view.findViewById(R.id.tv_searchtype);

    int type = cursor.getInt(FilterProvider.SEARCH_TYPE_COLUMN);
    [...]
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    final View view = inflater.inflate(R.layout.group_list_item, parent, false);
    return view;
}

但是现在我想知道我如何能够“携带”内容uris以及列表项。 那么我以后可以轻松地检索它们以便对项目进行操作(例如更新,删除)?

使用View.id字段是个好主意吗?

    view.setId(cursor.getInt(FilterProvider.KEY_COLUMN));

还是我完全走错了路?我是否需要担心,因为Integer实际上是Sqlite中的Long?

1 个答案:

答案 0 :(得分:0)

错误,我不会像这样混淆视图ID。只是似乎不是一个好主意。我不能说我有任何证据证明这一点,但游标适配器正在处理视图,谁说未来的平台版本对子视图ID没有重要作用?

然而,有一个完美的方法可以满足您的需求:

view.setTag(Object someObject);

http://developer.android.com/reference/android/view/View.html#setTag(java.lang.Object

所以,在你的情况下,你可以这样做:

view.setTag(new Integer(cursor.getInt(FilterProvider.KEY_COLUMN)));

然后在任何地方检索它,你会这样做:

Integer key = (Integer) view.getTag();

我希望有所帮助!