Android: Sprache programmgesteuert ändern

Ich habe 3 Tasten, um die Sprache zu ändern. Also muss ich eine Methode erstellen, mit der ich den Zuhörern Schaltflächen zuweisen kann, die bei jedem Drücken die Sprache ändern. Ich habe es versuchthttps://stackoverflow.com/a/2900144/1088229 aber auf diese Weise ändert es nur einmal das Gebietsschema und scheint nicht mehr zu funktionieren (wenn ich erneut klicke, reagiert es nicht einmal mehr). Also habe ich hinzugefügtchangeLanguageListener() Am Ende des Listeners wird der Listener aktualisiert.

Also ist es in Ordnung, wie ich es gelöst habe oder gibt es einen anderen Weg?

private void changeLanguageListener() {
    final Button butEn = (Button) findViewById(R.id.button_language_en);
    final Button butLt = (Button) findViewById(R.id.button_language_lt);
    final Button butRu = (Button) findViewById(R.id.button_language_ru);
    OnClickListener listener = new OnClickListener() {

        public void onClick(View v) {
            Button but = (Button) v;
            Resources res = getResources();
            String current = res.getConfiguration().locale.getCountry();
            Log.i("Current", current);
            String localeString = new String(current);
            if (but.equals(butEn)) {
                localeString = "en";
            } else if (but.equals(butLt)) {
                localeString = "lt";
            } else if (but.equals(butRu)) {
                localeString = "ru";
            }
            Log.i("Clicked", localeString);

            if (!current.equalsIgnoreCase(localeString) && localeString.length() > 0) {
                // Change locale settings in the app.
                DisplayMetrics dm = res.getDisplayMetrics();
                android.content.res.Configuration conf = res.getConfiguration();
                conf.locale = new Locale(localeString.toLowerCase());
                res.updateConfiguration(conf, dm);  
                //refresh menu
                setGridView();
                //added this line to get refreshed listener
                changeLanguageListener();
            }               
        }
    };
    butEn.setOnClickListener(listener);
    butLt.setOnClickListener(listener);
    butRu.setOnClickListener(listener);
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage