我有一个提供内容的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?
答案 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();
我希望有所帮助!