1

Как обновить приложение с onConfigChanges без потери экземпляра

protected void onResume() { 
 
     super.onResume(); 
 

 

 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
 
     Configuration config = getBaseContext().getResources().getConfiguration(); 
 

 
     String lang = settings.getString("lang_list", ""); 
 
     // Log.d("Lang",lang); 
 
     if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) { 
 
      recreate(); 
 
      Locale locale = new Locale(lang); 
 
      Locale.setDefault(locale); 
 
      config.locale = locale; 
 
      getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
 
     } 
 

 
     if (AppController.getInstance().isPreferenceChanged()) { 
 
      setupViewPager(viewPager); 
 
      adapter.notifyDataSetChanged(); 
 
     } 
 
    }

Я хочу изменить язык приложения, не воссоздавать приложение. Я имею в виду, что я хочу это сделать, когда пользователь выбирает любой язык из этой настройки, тогда он должен изменить язык действия настройки без использования recreate();, потому что, когда я использую recreate();, он один раз мигает.

Так что я не использую recreate();. Вместо этого я написал ниже код в Настройка активности в AndroidManifest.xml

<activity 
      android:name=".activity.SettingsActivity" 
      android:label="@string/title_activity_settings" 
      android:configChanges="orientation|keyboardHidden|screenSize|locale|layoutDirection"/> 

Как и ниже скриншоте вы можете увидеть, что я выбрал «хинди» для языка, но это не обновляя активность на хинди. Я имею в виду «Выбрать страну», «Выбрать свой язык» и «Выбрать категории» должен отображаться на хинди вместо английского. Я написал String на обоих языках.

Can Anybody know Как изменить его при изменении языка? OR Почему onConfigChanges не работает для локали, поскольку работает для ориентации.

Спасибо!

enter image description here

ответ

0

В ваших MainActivity sharedPrefrences вызова на OnStart обратного вызова InstEd вызова в OnCreate

Пример: -

protected void onStart() { 
    SharedPreferences sharedPreferences = this.getSharedPreferences("selectedLanguage", Context.MODE_PRIVATE); 
    String pine = sharedPreferences.getString("language", DEFAULT); 
    String languageToLoad = pine; 
    Locale locale = new Locale(languageToLoad);//Set Selected Locale 
    Locale.setDefault(locale);//set new locale as default 
    Configuration config = new Configuration();//get Configuration 
    config.locale = locale;//set config locale as selected locale 
    this.getResources().updateConfiguration(config, this.getResources().getDisplayMetrics()); 
    invalidateOptionsMenu(); //This changes language in OptionsMenu too 
    setTitle(R.string.app_name); //calling app name according to language selected by user 
    super.onStart(); 
} 
+0

Ничего не случилось ..... :( –

+0

Мне нужно изменить язык активности, когда я выбираю другой язык ... Все приложение должно автоматически изменяться на выбранный язык ... –

+0

опубликуйте свой код счетчика. – Queendevelopers

0

Вы можете использовать класс одноплодной, который будет обрабатывать изменения языка без перезагрузки деятельность,

public class MyApplication extends Application 
{ 
    private Locale locale = null; 

    @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(); 

     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 

     Configuration config = getBaseContext().getResources().getConfiguration(); 

     String lang = settings.getString(getString(R.string.pref_locale), ""); 
     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()); 
     } 
    } 
} 
+0

Не работает для меня ... :( –

+0

Вы добавили MyApplication в ярлык «name»? –

+0

Да ..... @ Prokash –