как обрабатывать локаль и asyncTask для активности в Android, когда меняется ориентация - PullRequest
1 голос
/ 27 июля 2011

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

Проблема началась, когда я захотел изменить локаль своей деятельности.Например, когда я меняю ориентацию, меняются региональные настройки, которые я прочитал: -

Как сохранить состояние приложения Android?

и Перезапуск активностиротация Android

Я хочу изменить макет с альбомного на портретный. Поэтому я не использовал

android: configChanges = "locale | ориентация"

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

Locale locale = new Locale("ar"); 
                Locale.setDefault(locale);
                Configuration config = new Configuration();
                config.locale = locale;
                getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

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

Я думаю, что могу использовать onRetainNonConfigurationInstance (), но я не знаю, как с этими вещами мне нужно справиться,Так что любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 27 июля 2011

Я только сейчас догадываюсь, но, возможно, вы можете использовать

onSaveInstanceState(Bundle)

и

onRestoreInstanceState(Bundle)

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

0 голосов
/ 27 июля 2011

Если вы используете фрагменты, рассмотрите возможность помещения AsyncTask в Fragment, который сохраняет себя. Добавьте его с тегом, и вы можете получить его снова в onCreate.

Я изо всех сил пытаюсь найти его сейчас, но я думаю, что это используется в приложении ввода-вывода Google .

0 голосов
/ 27 июля 2011

Каждый раз при изменении конфигурации создается новый объект Resources, который указывает на правильные (зависящие от конфигурации) ресурсы.Таким образом, все ваши предыдущие изменения в объекте Resource удаляются.

В вашем случае вам необходимо переустанавливать локаль каждый раз, когда вызывается ваш onCreate().

Как совет, не используйте android:configChanges, если вы действительно не понимаете все последствия и не имеете веских причин использовать его.Пожалуйста, внимательно прочитайте Handling Runtime Changes для получения более подробной информации.

И еще один совет, это может быть хорошей идеей, чтобы переместить AsyncTask на выделенный сервис.Поскольку сервисы лучше приспособлены для таких «фоновых» задач и намного лучше справляются с изменениями конфигурации, хотя требуется больше кода.Вы должны быть очень осторожны при использовании AsyncTask s, которые должны выдержать изменения конфигурации.Я написал два сообщения о фоновых темах в Activites: часть 1 и часть 2 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...