2017-09-10 1 views
0

Je recherche sur Google & stackoverflow mais je ne peux pas résoudre mon problème. Je me réfère http://www.androhub.com/android-building-multi-language-supported-app/ J'ai les trois activités (activité 1,2,3). Activité 1> Activité 2> Activité 3 (changement de milti lang). Dans l'activité 3, j'ai deux boutons radio à changer (en, salut). Après avoir changé de langue aller à la première activité (Activité 1), ça va. Mais je veux rester en activité (rafraîchir l'activité en cours), après avoir choisi un bouton radio (changement de langue). Sinon, comment rappeler onCreate() quand je retournerai sur BackPressed(). Comment faire le meilleur moyen de rester actif après la langue de changement.Comment rafraîchir une activité après avoir changé de langue?

onCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main3); 

    txt = (MMTextView) findViewById(R.id.txt); 
    radioGroup = (RadioGroup) findViewById(R.id.radioGroup); 

    pref = getSharedPreferences("MyPref", Activity.MODE_PRIVATE); 
    editor = pref.edit(); 

    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) { 
      String lang = "en"; 
      switch (i) { 
       case R.id.eng: 
        lang = "en"; 
        Intent i1 = new Intent(Main3Activity.this, MainActivity.class); 
        i1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(i1); 
        finish(); 
        break; 
       case R.id.hi: 
        lang = "hi"; 
        Intent i2 = new Intent(Main3Activity.this, MainActivity.class); 
        i2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(i2); 
        finish(); 
        break; 
       default: 
        break; 
      } 
      changeLocale(lang); 
     } 
    }); 

    loadLocale(); 
} 

changeLocale

private void changeLocale(String lang) { 
    if (lang.equalsIgnoreCase("")) 
     return; 
    Locale myLocale = new Locale(lang); 
    saveLocale(lang); 
    Locale.setDefault(myLocale);  
    Configuration config = new Configuration(); 
    config.locale = myLocale; 
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
} 

& saveLocale loadLocale

private void saveLocale(String lang) { 
    editor.putString("save", lang); 
    editor.commit(); 
} 

private void loadLocale() { 
    String lang = pref.getString("save", ""); 
    changeLocale(lang); 
} 
+0

Ce lien peut vous aider: https://stackoverflow.com/questions/8049207/how-to-refresh-activity-after-changing-language-locale-inside-application?answertab=oldest#tab-top –

+0

@ Shwe S'il vous plaît consulter ce lien ---> https://stackoverflow.com/questions/45088039/set-different-language-in-android-studio/45088145#45088145 – yash786

Répondre

0

Vous pouvez ouvrir et fermer la même activité comme:

startActivity(new Intent(ActivityName.this, ActivityName.class)); 
finish(); 

J'espère que cela fonctionne.

0
/***You need to create separate String file for both arabic and 
English***/ 

English 
Values 
String.xml 
Hindi 
Values-hi 
String.xml 

/**You can change the application language using the following code:**/ 

language = "en"; or language = "hi"; 

@Override 
public void recreate() 
{ 
if (android.os.Build.VERSION.SDK_INT >= 14) 
{ 
    super.recreate(); 
} 
else 
{ 
    startActivity(getIntent()); 
    finish(); 
} 
} 

private void updateLanguage(String language) 
{ 
Locale locale = new Locale(language); 
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; 
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE); 
SharedPreferences.Editor editor = languagepref.edit(); 
editor.putString("languageToLoad",language); 
editor.apply(); 

recreate(); 
} 
0

Utilisez recreate() pour redémarrer l'activité en cours.