2014-02-09 5 views
0

Извините, название кажется немного неясным.Как обновить текущую активность от основной деятельности

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

public void setLocale(String currentLanguage) { 

    myLocale = new Locale(currentLanguage); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(//HERE HOW IS POSSIBLE SPECIFY THREE ACTIVITIES); 
    startActivity(refresh); 
} 

ответ

2

Вы можете использовать метод Activity "воссоздать", но я думаю, что это требует уровня API 11, как это:

public void setLocale(String currentLanguage) { 

    myLocale = new Locale(currentLanguage); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    recreate(); 
} 

Или, если это Locale обновления вы используете этот:

 Locale locale = new Locale(AR_LANG); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
+0

некоторые подсказки кода plzz: P – bShah

+0

Экран мигает: D – bShah

+0

** Если это обновление локали, вы используете это: ** Как я уже упоминал. Изменение языка в меню в прядильщике, которое может быть доступно из любого активность приложения. Так что это в классе базовой активности. У меня нет метода OnCreate(). – bShah

0

Один из способов сделать это, вероятно, чтобы finish() и перезапустить деятельность, так же, как Android уничтожить его на изменение конфигурации.

finish(); 
Intent i = new Intent(this, this.getClass()); 
startActivity(i); 

вниз сторона этого решения заключается в том, что вы на самом деле создает совершенно новую деятельность и пользователь увидит черный экран для немного.

Другим решением, которое может работать, является хранение контейнера в качестве contentView вашей деятельности и повторный просмотр всего представления. Нижняя сторона здесь заключается в том, что ваш код и View hiearchy будут сильно зависеть от этого решения.

+0

Должен ли я делать это в Базовой деятельности? – bShah

+0

Он работает таким образом, но создать новую активность снова :( Intent обновления = новый Intent (getApplicationContext(), this.getClass()); \t \t startActivity (обновить); – bShah

+0

да я знаю, это defenetly не хорошее решение –

Смежные вопросы