У меня есть некоторые данные, которые не изменятся. Эти данные представляют собой вложенные названия меню для экрана входа приложения.
Я попытался сохранить данные с помощью Android Room, но это оказалось ненужным. Даже если бы это было успешно, в этом не было бы необходимости, поскольку данные не изменятся.
Затем я попытался сохранить данные, используя массив строковых ресурсов. Выглядело неплохо, но мне нужны были вложенные массивы, и по этой причине этот вариант не подходил.
Итак, в этом случае, как лучше всего сохранить эти постоянные данные?
Простое решение — это Kotlin object
:
object Whatever {
val yourOuterMenu = listOf(
listOf(...),
listOf(...),
listOf(...)
)
// etc.
}
Альтернативно вы можете сохранить файл JSON или XML в качестве ресурса в src/main/assets/
и прочитать его с помощью AssetManager
. ИМХО, это добавляет ценности только в том случае, если файл нужно поддерживать непрограммисту, или вы сгенерируете его с помощью какого-либо инструмента.
@striver: «Хороша ли практика сохранять эти имена меню и названия подменю в качестве членов класса?» - это будет зависеть от широкого спектра соображений, которые выходят далеко за рамки этого вопроса. Например, если вы собираетесь поддерживать несколько языков, вам нужно сначала решить, как вы хотите это сделать (строчные ресурсы Android? Многоплатформенные строковые ресурсы Kotlin? что-то еще?). Только тогда вы сможете решить, насколько подход object
будет соответствовать вашим многоязычным планам. «Соответствует ли этот подход вашему сценарию?» -- все в порядке, я пытался ответить на ваш вопрос.
Вы можете сохранить его в файле JSON, а затем использовать этот файл JSON внутри приложения для сериализации данных JSON. Рекомендуется Json, поскольку гораздо проще писать для сложной структуры данных, как вы упомянули. Если вам нужно что-то нативное, вы можете выбрать класс объектов Kotlin и создать объект Array или Array of Object, все, что вам кажется подходящим.
Android-студия предоставляет возможность работы с XML-файлами. Пример файла:
<parent_element>
<element1>
<nested_element_1>Some data</nested_element_1>
<nested_element_2>Some other data</nested_element_2>
</element1>
<element2>
<nested_element_3>Some data</nested_element_3>
<nested_element_4>Some other data</nested_element_4>
</element2>
</parent_element>
Хорошей ли практикой является сохранение этих названий меню и названий подменю в качестве членов класса? Мне нужно будет передать его идентификатор навигационному контроллеру при нажатии на подменю. Я также попробовал listOf( Pair(MENU,listOf(SUBMENU), ...), подходит ли этот подход вашему сценарию?