android: configChanges= "orientation" ne fonctionne pas avec les fragments

j'essaie juste d'adapter certaines de mes applications pour HoneyComb.

La question iI suis confronté est la destruction de mon activité sur le changement d'orientation (portrait/paysage)

quand j'utilisais une activité classique, j'ai écrit dans le manifeste:

Mais maintenant, toutes ces lignes ne fonctionnent plus!

y a-t-il une solution pour ça?

mon code:

    <activity android:name=".TwitterActivity" android:label="@string/app_name"
        android:configChanges="keyboardHidden|orientation" />

    <activity android:name=".TwitterActivity$AppListFragment"
    android:configChanges="keyboardHidden|orientation"  />
57
demandé sur galvan 2011-08-21 20:20:52

8 réponses

basé sur mon expérience avec Honeycomb 3.0 et la bibliothèque de compatibilité (r1).

configChange="orientation" fonctionne avec des fragments pour empêcher que l'activité (à laquelle elle s'applique) ne soit recréée lors d'un changement d'orientation. Si vous voulez que le fragment ne soit pas recréé lors de la recréation de l'activité, alors appelez setRetainInstance dans onCreate .

à moins que je ne manque quelque chose, Je ne reçois pas tout à fait votre deuxième entrée manifeste, n'est-ce pas? AppListFragment un Fragment ? Dans l'affirmative, pourquoi est-elle inscrite dans votre manifeste?

Voir AFIN de Répondre à pour les nouveaux qualificatifs qui est susceptible d'être la cause de cette si vous êtes cibler sdk 13, suggère d'essayer android:configChanges="orientation|screenSize"

74
répondu PJL 2017-05-23 12:33:42

j'ai eu un problème similaire, mais a dû faire quelques ajouts pour le faire fonctionner avec différentes versions (y compris ICS).

dans l'activité principale de l'application J'ai ajouté une version légèrement différente de ce que Jason a offert.

<activity
android:name=".MyMainActivity"
android:configChanges="orientation|keyboardHidden|screenSize" 
android:label="@string/app_name" >

j'ai eu ce travail sur pré-nid D'abeille avec:

           <activity
        ....
        android:configChanges="orientation|keyboardHidden" 
        .... >

j'ai dû faire le premier exemple pour le faire tourner sur toutes les versions. J'utilise actuellement fragments et ActionBarSherlock pour rétro-compatibilité.

j'ai aussi changé la façon dont j'économisais et rechargeais:

        public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        // Set up webview object
        View v = inflater.inflate(R.layout.webview_layout, container, false);
        webview = (WebView)v.findViewById(R.id.webview_fragment);
        webview.getSettings().setJavaScriptEnabled(true);

        // Check to see if it has been saved and restore it if true
        if(savedInstanceState != null)
        {
            if (savedInstanceState.isEmpty())
                Log.i(tag, "Can't restore state because bundle is empty.");
            else
            {
                if (webview.restoreState(savedInstanceState) == null)
                    Log.i(tag, "Restoring state FAILED!");      
                else
                    Log.i(tag, "Restoring state succeeded.");      
            }

        }
        else 
        {
            // Load web page
            webview.setWebViewClient(new MyWebViewClient());
            webview.getSettings().setPluginsEnabled(true);
            webview.getSettings().setBuiltInZoomControls(false); 
            webview.getSettings().setSupportZoom(false);
            webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);   
            webview.getSettings().setAllowFileAccess(true); 
            webview.getSettings().setDomStorageEnabled(true);
            webview.loadUrl(mTabURL);       
        }
        return v;
    }

le code pour la méthode d'état de l'instance de sauvegarde:

       @Override
    public void onSaveInstanceState(Bundle outState)
    {
        if(webview.saveState(outState) == null)
            Log.i(tag,"Saving state FAILED!");
        else
            Log.i(tag, "Saving state succeeded.");      
    }

Espérons que cette aide.

37
répondu JustLearningAgain 2012-03-03 21:49:25

Jusqu'à API 13 Il y avait une nouvelle valeur à l'attribut configChanges, screenSize

donc si vous utilisez de grands écrans, assurez-vous d'ajouter screenSize dans votre attribut configChanges:

        android:configChanges="orientation|keyboardHidden|screenSize"
34
répondu Thomas Gatt 2012-08-17 23:30:26

à partir de Android 3.2 (niveau API 13), la" taille de l'écran " change également lorsque l'appareil passe de l'orientation portrait à l'orientation paysage. Ainsi, si vous voulez empêcher un redémarrage de l'exécution en raison d'un changement d'orientation lors du développement pour le niveau 13 ou supérieur de L'API (comme déclaré par les attributs minSdkVersion et targetSdkVersion), vous devez inclure la valeur "screenSize" en plus de la valeur "orientation". C'est-à-dire que vous devez décaler android:configChanges="orientation|screenSize". Cependant, si votre application cible le niveau 12 de L'API ou un niveau inférieur, alors votre activité gère toujours Cette modification de configuration elle-même (cette modification de configuration ne redémarre pas votre activité, même si vous utilisez un appareil Android 3.2 ou un appareil supérieur).

9
répondu Aarun 2012-10-12 06:37:29

j'avais ce même problème (c.-à-d., redémarrage de l'activité) même sans fragments.

j'ai changé:

android:configChanges="orientation|keyboardHidden"

à:

android:configChanges="orientation|keyboardHidden|screenSize" 

Qui empêchent l'activité de redémarrer.

4
répondu Eric Fettman 2016-02-17 00:53:14

je sais que c'est une réponse très tardive, mais j'ai récemment fait face à cette question et j'ai été en mesure de résoudre ce problème pour L'activité de Fragment.

1) Dans Le Manifeste,

      android:configChanges="orientation|keyboardHidden|screenSize"

2) dans le fichier de classe, Outrepasser le onSaveInstanceState(Bundle outState). Thats it! Enjoy:)

1
répondu Prachi 2013-12-01 12:43:39

dans le fichier du Manifeste, activité intérieure ajouter cette ligne

android: configChanges=" keyboardHidden|orientation|screenSize".

0
répondu R.S 2017-02-08 06:51:57

ajouter ce qui suit Au Manifeast.Xml

<android:configChanges="orientation|screenSize" >

Son travail pour vous.

-1
répondu Prudhvi Bsecure 2018-04-19 08:53:59