Вопрос по android, adapter, listview – Android: как сделать адаптер со стабильными идентификаторами?

12

Я создал собственный пользовательский адаптер, расширенный от BaseAdapter, для отображения списка и т. Д.

Я хочу, чтобы он поддерживал одиночный и множественный выбор, поэтому он должен иметь стабильные идентификаторы. Я проверил сADAPTER.hasStableIds() и результат ложный.

Я переопределил этот метод, чтобы попытаться получить стабильные идентификаторы без удачи.

<code>public long getItemId(int position) {
   return (long) getItem(position).hashCode();
}
</code>

Есть идеи как это сделать? Спасибо!

Ваш Ответ

1   ответ
20

hasStableIds вернуть истину.

Также данные на вашем адаптере должны либо переопределитьhashCode() или имеет какое-то поле id для возвратаgetItemId.

hashCodes не являются уникальными, и реализация по умолчанию использует position как id. Как hashCode относится к идентификаторам элементов?
Это окончательно сейчас. поэтому не могу переопределить это больше. Должен вызвать setHasStablesIds
Ничего себе, простое и легкое решение. Спасибо! giorgiline
@ Петр: Из того, что я понял, "стабильные идентификаторы" означает, что вы всегда можете идентифицировать свои объекты / строки, используя уникальный номер (иначе идентификаторы никогда не меняются в течение жизненного цикла вашего адаптера). Следовательно, точно так же, как вам нужны уникальные / не конфликтующие хеш-коды для HashMap, вы можете повторно использовать хеш-код здесь, в своем адаптере.
Хеш-коды не обязательно должны быть уникальными. Уникальность хеш-кодов в одной и той же хеш-таблице (например, HashMap) является желательным свойством, но не обязательным требованием. Я до сих пор считаю, что переопределение hashCode () в этом случае не нужно.

Похожие вопросы