2016-03-26 2 views
0

J'ai deux mises en page dans les dossiers de mise en page et de mise en page-terres. Le problème est lorsque l'orientation change, elle appellera la méthode onCreate. Comment empêcher la méthode onCreate appelée?Android changer l'orientation sans appel oncreate

C'est ce que j'ai fait. Mais ça n'a pas marché du tout.

AndroidManifest

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

MapsActivity.java

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    orientationChange = true; 
    //reload your ScrollBars by checking the newConfig 
} 
+0

Que voulez-vous ne voulez pas arriver à l'intérieur onCreate? –

+0

Ne pas arrêter le résultat naturel d'un changement d'orientation à moins que vous ne compreniez * absolument * pourquoi vous voulez faire cela et comment vous comptez pour le changement. Vous êtes potentiellement demander un tas de nouveaux problèmes en faisant cela. –

Répondre

1

Ajouter ce dans le fichier manifeste pour votre activité

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

Vous pouvez utiliser

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

ou

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

pour verrouiller l'orientation. Parce que, comme vous l'avez mentionné, onCreate est appelé à chaque fois que l'écran tourne.

Mais vous devez l'appeler avant la setContentView (R.layout.main) pourrait ressembler à ceci:

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
setContentView(R.layout.main); 
} 

ouandroid:screenOrientation="sensorPortrait"

comme dans votre AndroidManifest

<activity 
      android:name=".ActivitiesClasses.Login" 
      android:label="@string/app_name" 
      android:screenOrientation="sensorPortrait" 
      android:theme="@style/AppTheme.NoActionBar" /> 
+0

A travaillé ici. Je vous remercie. – statosdotcom

+0

Bienvenue. @statosdotcom –

+0

s'il vous plaît marquer comme réponse préférée de sorte qu'il aidera plus de gens –

1

Lorsque l'orientation est modifiée, elle doit charger la nouvelle w configuration. il a besoin de le recréer. Donc, il n'y a aucun moyen de quitter cette récréation.

Il y a une certaine façon de l'éviter:

  1. avant l'activité destoryed appelle onsaveinstancestate. Où vous pouvez enregistrer votre état d'affichage & dans onCreate vous pouvez obtenir l'enregistrement enregistré & le repeupler.

sauver votre état d'activité

static final String STATE_SCORE = "playerScore"; 
static final String STATE_LEVEL = "playerLevel"; 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
// Save the user's current game state 
savedInstanceState.putInt(STATE_SCORE, mCurrentScore); 
savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); 

// Always call the superclass so it can save the view hierarchy state 
super.onSaveInstanceState(savedInstanceState); 
} 

Restaurer votre état d'activité

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); // Always call the superclass first 

// Check whether we're recreating a previously destroyed instance 
if (savedInstanceState != null) { 
    // Restore value of members from saved state 
    mCurrentScore = savedInstanceState.getInt(STATE_SCORE); 
    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); 
} else { 
    // Probably initialize members with default values for a new instance 
} 
... 
} 
  1. Vous pouvez utiliser Fragment. Dans lequel vous devez définir setRetainIntace(true). Alors le fragment ne sera pas détruit pendant que l'activité est détruite.

: Réfs

Recreating an Activity