Обновление (воссоздание) действий в заднем стеке при изменении локали во время выполнения - PullRequest
0 голосов
/ 29 июня 2018

У меня есть действие, скажем ActivityMain, из этого действия я перешел в другое действие, которое называется ActivitySettings, и в настройке действия я меняю локаль приложения, нажимая кнопку, и, используя воссоздание, добился нужного мне изменения в текущая активность, но когда я нажимаю назад, моя ActivityMain возобновляется, но локаль не обновляется.

Может кто-нибудь сказать мне, как «воссоздать» действия backstack? какой будет правильный подход.

Я не могу вызвать пересоздание при обновлении, поскольку это будет бесконечный цикл

1 Ответ

0 голосов
/ 29 июня 2018

В каждом действии onCreate() вы можете поддерживать currentLangCode. Проверьте это значение в onResume(), если оно отличается, вы можете сделать вывод, что языковой стандарт был изменен, и recreate()

Вы можете сделать это следующим образом:

public class ActivityA extends AppCompatActivity{
    private String currentLangCode;
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        currentLangCode = getResources().getConfiguration().locale.getLanguage();
        ...
    }
    @Override
    public void onResume(){
        ...
        if(!currentLangCode.equals(getResources().getConfiguration().locale.getLanguage())){
            currentLangCode = getResources().getConfiguration().locale.getLanguage();
            recreate();
        }
    }
    ...
}

Моя рекомендация

Если вы хотите применить его ко всем действиям, просто создайте BaseActivity следующим образом:

public class BaseActivity extends AppCompatActivity{
    private String currentLangCode;
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        currentLangCode = getResources().getConfiguration().locale.getLanguage();
        ...
    }
    @Override
    public void onResume(){
        ...
        if(!currentLangCode.equals(getResources().getConfiguration().locale.getLanguage();)){
            currentLangCode = getResources().getConfiguration().locale.getLanguage();
            recreate();
        }
    }
    ...
}

Продлить все действия с BaseActivity

public class ActivityA extends BaseActivity{

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
    }
    @Override
    public void onResume(){
      super.onResume();
    }
    ...
}
...