Безопасный диапазон номеров для моих идентификаторов в динамической компоновке?
Я разрабатываю Activity с фиксированной и динамической компоновкой. Динамическая часть (и, следовательно, количество и тип созданных виджетов) основана на значениях базы данных таким образом:
Для каждой строки базы данных у меня будет группа виджетов. А компоненты каждой группы зависят от типа объекта (определенного из одного из столбцов) этой строки базы данных.
Для сохранения/восстановления состояния экземпляра все виджеты должны иметь идентификаторы. Я хотел бы убедиться, что мои собственные идентификаторы никогда не будут конфликтовать с идентификаторами, которые из сгенерированного класса R.
Для лучшей обработки внутри приложения (поиск того, какой виджет отображает в какое поле, в котором находится объект данных), может понадобиться схема нумерации, такая как ID = строка * 100 + fieldindex. Fieldindex не является точно номером colum. Каждый тип объекта должен иметь свои собственные поля.
Поскольку значения ID в сгенерированном R, похоже, не имеют последовательных чисел, я не могу просто предопределить пул идентификаторов в R и использовать их без необходимости дополнительного сопоставления.
Вторая причина против предопределенного пула: большое количество полевых указателей приведет к большому пулу идентификаторов. В-третьих, размер пула идентификаторов ограничивает количество строк, которое может отображаться.
Есть ли безопасный диапазон номеров, который я могу использовать для своих собственных идентификаторов компонентов компоновки?
Глядя на R.java в папку gen/, у меня создалось впечатление, что сгенерированные идентификаторы превышают 0x7f000000. Это гарантировано?
И если да, то диапазон от 0x00000000 до 0x7f000000 свободен для использования или зарезервирован для внутренних целей android?
Ответы
Ответ 1
Почему вы хотите избежать того же идентификатора? Единственное, что необходимо:
An ID need not be unique throughout the entire tree, but it should be unique within the part of the tree you are searching
. Таким образом, вы можете использовать свою формулу
ID = строка * 100 + fieldindex
Я буду работать нормально, даже если он не уникален в проекте.