I have a project that needs to support in-app multi-languages changes.
And I am using the 'androidx.appcompat:appcompat:1.1.0' library.
I use this code to change default locale of App
For Android API level >= 24
@TargetApi(Build.VERSION_CODES.N)
private fun updateResources(context: Context, locale: Locale): Context {
    Locale.setDefault(locale)
    val configuration = context.resources.configuration
    configuration.setLocale(locale)
    return context.createConfigurationContext(configuration)
}
For Android API level < 24
private fun updateResourcesLegacy(context: Context, locale: Locale): Context {
    Locale.setDefault(locale)
    val resources = context.resources
    val configuration = resources.configuration
    configuration.locale = locale
    resources.updateConfiguration(configuration, resources.displayMetrics)
    return context
}
And I call this method on base activity by override attachBaseContext like this:
override fun attachBaseContext(newBase: Context?) {
    super.attachBaseContext(LocaleManager.setLocale(newBase!!))
}
It works perfectly on Android API level >= 24, but doesn't work below API level 24, I have found out a solution at enter link description here
override fun applyOverrideConfiguration(cfgOverride: Configuration?) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP &&
        Build.VERSION.SDK_INT < Build.VERSION_CODES.O
    ) {
        // add this to fix androidx.appcompat:appcompat 1.1.0 bug
        // which happens on Android 5.x ~ 7.x
        resources
    }
    super.applyOverrideConfiguration(cfgOverride)
}
It resolved by simply calling getResources() in Activity.applyOverrideConfiguration().
Can Anyone explain why the issue can be fixed by this solution?
 
     
    