Android 当语言(ListPreference)更改时,如何更改我的应用程序区域设置?

Android 当语言(ListPreference)更改时,如何更改我的应用程序区域设置?,android,android-studio,listpreference,Android,Android Studio,Listpreference,如何在更改语言时更改应用程序区域设置(列表首选项) 我在Android Studio中使用了自动生成的SettingsActivity,当lang_列表的listpreference更改时,我希望使用所选区域设置中的资源(字符串)。我得到了他的推荐信。调用内部setLocale()方法getResources(),这会给出错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.res.Resources android.

如何在更改语言时更改应用程序区域设置(列表首选项)

我在Android Studio中使用了自动生成的SettingsActivity,当lang_列表的listpreference更改时,我希望使用所选区域设置中的资源(字符串)。我得到了他的推荐信。调用内部setLocale()方法getResources(),这会给出错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.res.Resources android.content.Context.getResources()”。 我已将我的设置活动粘贴在这里


最后,我在AppController中使用以下代码

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    if (locale != null)
    {
        newConfig.locale = locale;
        Locale.setDefault(locale);
        getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
    }
}
@Override
public void onCreate() {
    super.onCreate();
    // for Active Android
    ActiveAndroid.initialize(this);
    mInstance = this;

    /*locale management*/
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    Configuration config = getBaseContext().getResources().getConfiguration();
    String currentLangID = sharedPreferences.getString("lang_list", "");
    if(currentLangID.equals("3")) {
        //ne locale
        lang = "ne";

    } else if (currentLangID.equals("2")) {
        //ra locale
        lang = "ra";
    } else {
        // en locale
        lang = "en";
    }
    if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang))
    {
        locale = new Locale(lang);
        Locale.setDefault(locale);
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }
}
在AndroidManifest.xml中

<application
    android:name="org.nrum.app.AppController"

最后,我在AppController中使用以下代码

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    if (locale != null)
    {
        newConfig.locale = locale;
        Locale.setDefault(locale);
        getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
    }
}
@Override
public void onCreate() {
    super.onCreate();
    // for Active Android
    ActiveAndroid.initialize(this);
    mInstance = this;

    /*locale management*/
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    Configuration config = getBaseContext().getResources().getConfiguration();
    String currentLangID = sharedPreferences.getString("lang_list", "");
    if(currentLangID.equals("3")) {
        //ne locale
        lang = "ne";

    } else if (currentLangID.equals("2")) {
        //ra locale
        lang = "ra";
    } else {
        // en locale
        lang = "en";
    }
    if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang))
    {
        locale = new Locale(lang);
        Locale.setDefault(locale);
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }
}
在AndroidManifest.xml中

<application
    android:name="org.nrum.app.AppController"

当我打开我的应用程序时(本地根据共享首选项中的lang值),上述解决方案效果完美,但当我更改语言时,效果不会立即显现。当我打开我的应用程序时(本地根据共享首选项中的lang值),上述解决方案效果完美,但当我更改语言时,效果无法立即看到。这是的副本吗?这是的副本吗?
android:configChanges="layoutDirection|locale"