2013-07-22 3 views
2

У меня есть этот раздел настроек, где я разрешаю пользователям изменять отображаемые в приложении языки. Когда пользователь выбирает другой язык, активность перезагружается, чтобы можно было изменить язык. Но проблема в том, что когда пользователь щелкает обратно сразу после смены языка, язык, отображаемый в фоновом режиме, остается прежним. Итак, мой вопрос: что мне делать, чтобы применить изменение языка, когда я вернусь к какой-либо деятельности на фоне? Я полагаю, что я должен что-то сделать, чтобы обнаружить изменение в методе onResume, но я не уверен, что это такое. Если у Вас есть предложения, пожалуйста, дайте мне знать. Спасибо.Android - Изменение языка при нажатии

+0

Слушайте ** onResume ** метод в ActivityDestination или ** onBackPressed ** в ActivitySource. –

+0

, если вы используете функцию finish(), чтобы вернуться к предыдущему действию попытайтесь использовать намерение вместо этого, чтобы обновить предыдущую активность с помощью нового языка. – user1283633

ответ

3

После нескольких попыток я нашел решение своей проблемы. На моем onCreate методе, я получаю SharedPreferences, который содержит значение текущего языка, и получить текущий язык:

SharedPrefrences languagepref = getSharedPreferences("language",MODE_PRIVATE); 
String language = languagepref.getString("languageToLoad", Locale.getDefault().getDisplayLanguage()); 

Тогда в моем onResume методы я присвоить значение выше упомянутое переменной language на локальный переменной и обновить значение language. Тогда я сравниваю эти две переменные - если они разные, я уничтожу текущую деятельность и начать другую:

@Override 
    public void onResume(){ 
     super.onResume();  

     String oldLanguage = language; 
     language = languagepref.getString("languageToLoad", Locale.getDefault().getDisplayLanguage()); 
     if (!oldLanguage.equals(language)){ 
      finish(); 
      startActivity(getIntent()); 
     } 
    } 

И вуаля, что сделал трюк!

0

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

Это основа, в которой вы должны идти.

+0

Спасибо, я пробовал точно так, как вы мне сказали, но язык все еще не работает. т изменения фоновой активности. –

+0

Где вы создаете свои мнения и задаете свой текст? –

0

Вы пробовали перезапустить Activity после завершения изменения?

Вы можете просто использовать

finish(); 
startActivity(getIntent()); 

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

+0

Предполагаю, вы хотите обновить активность в 'onResume'? Ну, я пробовал это, и деятельность вряд ли может начаться из-за бесконечных циклов финиша и начала. –

+0

Если у вас нет сохраненных переменных, вы можете использовать 'onCreate (null);'. Это также должно возобновить вашу деятельность. – Traxex1909

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