1

Je suis maintenant à android. Et j'ai du mal à développer une application dans laquelle je suis supposé charger des données à partir d'un serveur puis remplir une liste avec ces données. J'ai utilisé asyncTask pour le faire et j'ai utilisé la fonction onRetainNonConfigurationInstance() pour gérer l'évolution de l'orientation de l'écran lors du chargement des données et cela a bien fonctionné.comment gérer les paramètres régionaux et asyncTask pour une activité dans Android lorsque l'orientation change

Le problème a commencé quand je voulais gérer un changement de langue mon activité. Comme quand je change l'orientation des changements de paramètres régionaux que j'ai lu ces: -

How do I save an Android application's state?

et Activity restart on rotation Android

Je veux faire la mise en page pour changer de paysage à portrait Je n'ai pas utilisé

android: configChanges = "locale | orientation"

Je ne peux toujours pas le résoudre. Je pense que le système change la langue de son propre quand je change l'orientation même si j'ai essayé de définir à l'aide

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

Je dois terminer l'activité et l'ouvrir à nouveau qui fera l'usager attend De plus, cela provoquera un plantage de l'application lorsque l'utilisateur essaiera à nouveau de changer d'orientation.

Je pense que je peux utiliser onRetainNonConfigurationInstance() mais je ne sais pas comment avec ces choses que je dois gérer. Donc, toute aide sera appréciée.

Répondre

0

Je devine juste maintenant, mais peut-être vous pouvez utiliser

onSaveInstanceState(Bundle) 

et

onRestoreInstanceState(Bundle) 

pour rétablir vos paramètres régionaux après un changement de configuration.

+0

J'ai essayé de le faire. Mais je pense qu'après avoir défini les paramètres régionaux par moi-même dans onRestoreInstanceState (Bundle), je vais terminer l'activité et la redémarrer, ce qui me permettra de recommencer à charger les données du serveur. Ai-je raison? – FAFI

+0

Peut-être que je n'ai pas bien compris votre question. Donc, vous voulez également conserver les données que vous avez chargées depuis le serveur par rapport aux changements de configuration? Jetez un oeil à [Gestion des dialogues de progrès et des changements d'orientation] http://blog.doityourselfandroid.com/2010/11/14/handling-progress-dialogs-and-screen-orientation-changes/ - cela pourrait vous aider à trouver un Solution. –

+0

J'ai utilisé cette façon de gérer le changement d'orientation et cela a fonctionné. Mais maintenant je dois gérer cela en plus de gérer la modification des paramètres régionaux et je n'arrive pas à trouver un moyen d'utiliser onRetainNonConfigurationInstance() pour résoudre ce problème. Comment puis-je utiliser onRetainNonConfigurationInstance() pour enregistrer le asyncTask et les paramètres régionaux? – FAFI

0

Chaque fois que la configuration est modifiée, un nouvel objet Resources est créé pour pointer vers des ressources (dépendantes de la configuration). Toutes vos modifications précédentes de l'objet Ressource sont donc supprimées.

Dans votre cas, vous devez réinitialiser les paramètres régionaux chaque fois que votre onCreate() est appelée.

Comme d'habitude, n'utilisez pas android:configChanges à moins que vous compreniez vraiment toutes les conséquences et ayez de bonnes raisons de l'utiliser. S'il vous plaît lire attentivement Handling Runtime Changes pour plus de détails.

Et une autre astuce, ce pourrait être une bonne idée de déplacer votre AsyncTask à un service dédié. Comme les services sont mieux adoptés pour de telles tâches en "arrière-plan" et gèrent mieux les changements de configuration, bien que plus de code soit requis. Vous devez être très prudent lors de l'utilisation AsyncTask s qui devrait survivre aux changements de configuration. J'ai écrit deux articles sur les sujets d'arrière-plan dans les activités: part 1 et part 2.

0

Si vous utilisez des fragments, pensez à placer votre AsyncTask dans un Fragment qui se conserve. Ajoutez-le avec une étiquette, et vous pouvez le retrouver à onCreate.

J'ai du mal à le trouver maintenant, mais je pense que cela est utilisé dans Google's I/O app.

Questions connexes