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" />
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"
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.
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"
à 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).
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.
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:)
dans le fichier du Manifeste, activité intérieure ajouter cette ligne
android: configChanges=" keyboardHidden|orientation|screenSize".
ajouter ce qui suit Au Manifeast.Xml
<android:configChanges="orientation|screenSize" >
Son travail pour vous.