Как добавить значения строк в arrayListOf в Kotlin?

#java #android #string #kotlin #arraylist

Вопрос:

Я перевожу приложение в Kotlin, используя два разных файла строк, но в arrayListOf есть строки, подобные этой:

 var language = arrayListOf<String>(
    "Profile Settings",
    "About Us",
    "Rate Us",
    "Language",
    "Push Notification",
    "Terms of Service",
    "Privacy Policy",
    "Help (FAQ)",
    "Support"
)
 

я хочу изменить его, чтобы он реагировал на выбранный язык
, например:

 var language = arrayListOf<String>(
    "@strings/Profile Settings",
    
)
 

можно ли это сделать из arrayListOf? или есть другой способ сделать это?

Ответ №1:

@string является синтаксисом XML для строкового ресурса. Чтобы получить доступ к строковым ресурсам в Kotlin, вы используете R.string. R Значения являются Int, поэтому вам нужно преобразовать их в строки, которые вы можете использовать map , чтобы избежать необходимости повторять код для каждого элемента.

 val language: List<String> = listOf(
    R.string.profileSettings,
    //...
).map { requireContext().getString(it) }
 

Если вы делаете это в свойстве, а не в функции, вам нужно обернуть все объявление, by lazy потому что контекст недоступен до тех пор, пока фрагмент не будет прикреплен.

В действии вы можете опустить requireContext(). , так как само действие является его собственным контекстом, поэтому его можно сократить до .map(::getString) .

Комментарии:

1. я продолжаю получать эту ошибку «Неожиданные токены (используйте ‘;’ для разделения выражений в одной строке)» после попытки вашего решения

2. У вас, должно быть, проблема с синтаксисом. Может быть, вы использовали неправильные скобки.

Ответ №2:

Вы можете переписать список массивов следующим образом:

 var language = arrayListOf<String>(
   getString(R.string.profile_settings),
   .... 
)