Я работаю над приложением, которое поддерживает несколько языков, поэтому, когда пользователи меняют язык, мы начинаем всплеск активности с флагами Intent.FLAG_ACTIVITY_CLEAR_TOP
, FLAG_ACTIVITY_CLEAR_TASK
и FLAG_ACTIVITY_NEW_TASK
, а затем заканчиваем языковую активность.
Intent mIntent = new Intent(this, SplashActivity.class);
mIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mIntent);
finish();
Мы создали класс-оболочку для обертывания ресурсов приложения
class AppResources(private val context: Context): IAppResources {
override fun getString(resId: Int): String {
Logger.i("Current locale language is: ${context.resources.configuration.locale.language}")
return context.getString(resId)
}
override fun getStringArray(resId: Int): Array<String> {
Logger.i("Current locale language is: ${context.resources.configuration.locale.language}")
return context.resources.getStringArray(resId)
}
}
Затем мы внедрили этот класс, используя Koin, вот так
factory<IAppResources> {
Logger.i("Current androidContext language is: ${androidContext().resources.configuration.locale.language}")
AppResources(androidContext())
}
Проблема в том, что когда мы получаем строковое значение изРесурсы мы получили с неправильной локализацией, так как Коин уже начал с предыдущего класса android context
и AppResources
, уже инициализированного со старым context
. Поэтому любые предложения по решению этой проблемы.