J'ai une méthode qui traduit mon application de l'anglais en suédois et inversement si l'utilisateur le souhaite. Cependant, je n'aime pas vraiment le fait que l'activité redémarre à chaque fois, car cela me rend difficile avec la variable savedInstaceState
et j'ai eu plusieurs accidents à cause de cela.
Voici à quoi ressemble ma méthode qui change de langue:
public void setApplicationLanguage(String language) {
myLocale = new Locale(language);
Resources res = activity.getResources();
DisplayMetrics display = res.getDisplayMetrics();
Configuration configuration = res.getConfiguration();
configuration.locale = myLocale;
res.updateConfiguration(configuration, display);
Intent refresh = new Intent(activity, StartupActivity.class);
activity.startActivity(refresh);
}
Existe-t-il une chance que la même fonction puisse être appliquée sans le:
Intent refresh = new Intent(activity, StartupActivity.class);
activity.startActivity(refresh);
?
Vous pouvez remplacer le code:
Intent refresh = new Intent(activity, StartupActivity.class);
activity.startActivity(refresh);
Avec la méthode de la classe d'activité:
recreate();
J'espère que votre version minimale du SDK prendra en charge car elle a été introduite dans le SDK 11. Votre activité sera recréée comme une nouvelle instance. Tout sera recommencé. D'après mon expérience, il est rapide comparé à la création d'une nouvelle Intent
. Mais si vous voulez transmettre des données, la méthode d'utilisation de Intent
est meilleure que celle! Vous pouvez ajouter des extras à la Intent
.
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
onConfigurationChanged(conf);
/*Intent refresh = new Intent(this, AndroidLocalize.class);
startActivity(refresh);*/
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// refresh your views here
lblLang.setText(R.string.langselection);
super.onConfigurationChanged(newConfig);
// Checks the active language
if (newConfig.locale == Locale.ENGLISH) {
Toast.makeText(this, "English", Toast.LENGTH_SHORT).show();
} else if (newConfig.locale == Locale.FRENCH){
Toast.makeText(this, "French", Toast.LENGTH_SHORT).show();
}
}
Android:configChanges="locale"
Créez une classe singleton:
public class Singleton {
private static Singleton mInstance = null;
private int repeat = 0;
public int getRepeat() {
return repeat;
}
public void setRepeat(int repeat) {
this.repeat = repeat;
}
}
Maintenant vous avez une méthode que vous pouvez définir et obtenir les données, alors créez une méthode et mettez-la sous la méthode onResume()
, appelez votre méthode et vous pouvez obtenir et définir les données comme suit:
Singleton.getInstance().setRepeat(1);
Singleton.getInstance().getRepeat();