Сохранение URI / идентификатора в CursorAdapter - PullRequest
0 голосов
/ 12 января 2012

Я получил 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?

1 Ответ

0 голосов
/ 13 марта 2012

ошибка, я бы не стал связываться с такими идентификаторами вида. Просто не кажется хорошей идеей. Я не могу сказать, что у меня есть какие-либо веские доказательства, подтверждающие это, но адаптер курсора обрабатывает представления, кто скажет, что какая-то будущая версия платформы не сделает ничего важного с идентификаторами дочерних представлений?

Однако есть идеальный метод для того, что вы хотите:

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();

Надеюсь, это поможет!

...