I have an app that uses 2 languages. When i press the button to change language, it changes for the strings in the menu and navigation drawer but does not changes for items in the listView. Here is my code.
private void showChangelanguageDialog() {
//array of languages to display
final String [] languages = {"English","Shona"};
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(getString(R.string.choose_language));
builder.setSingleChoiceItems(languages, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0){
//english
setLocale("en");
recreate();
}
if (which == 1){
//shona
setLocale("sn");
recreate();
}
//dismiss alert dialog when language is selected
dialog.dismiss();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
private void setLocale(String lang) {
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration configuration = new Configuration();
configuration.locale=locale;
getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
//save data to shared preferences
SharedPreferences.Editor editor = getSharedPreferences("Settings", MODE_PRIVATE).edit();
editor.putString("My_Lang",lang);
editor.apply();
}
//load saved lanuage in saved preferences
public void loadLocale(){
SharedPreferences prefs = getSharedPreferences("Settings",Activity.MODE_PRIVATE);
String language = prefs.getString("My_Lang","");
setLocale(language);
}
What could be the problem?