2016-07-12 2 views
0

J'ai une classe Adapter et une MainActivity. La classe Adapter affiche la liste des noms d'enfants et à côté des noms, elle affiche les time qu'ils sont arrivés à l'école. Le problème est quand je tourne en paysage, les valeurs time sont perdues.android: configChanges = "orientation | screenSize" modifie l'aspect de ma mise en page

J'envisage d'ajouter dans mon sous Manifest MainActivity

android:configChanges="orientation|keyboardHidden|screenSize" 

Ce qui arrive est que les valeurs de temps ne sont pas perdus en mode paysage, mais l'aspect de la mise en page apparaît identique à celle du mode portrait. En réalité, la disposition du paysage est légèrement différente de celle du portrait.

Qu'est-ce que je fais dans ce cas afin d'obtenir time valeurs et aussi de maintenir l'aspect de l'aménagement paysager.

Répondre

1

Il y a 2 options:

  1. utilisation onSaveInstanceState(Bundle outState) méthode dans votre activité ou Fragment - pour sauvegarder vos données et de les restaurer après la rotation (dans onCreate(Bundle savedInstanceState) ou onRestoreInstanceState(Bundle savedInstanceState))

Exemple:

@Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putSerializable("time_data", (Seriazable) mTimeList); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ... 

     if (savedInstanceState != null) { 
      // restore value of members from saved state 
      mTimeList = savedInstanceState.getSerializable("time_data"); 
     } 

     ... 
    } 
  1. Utilisez Android: configChanges comme vous le faites utilisation dy pour gérer les changements par vous-même, mais la mise en page du paysage gonflent après la rotation

Exemple:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 

Je préfère la première option et aussi proposée dans ce Android guide.

+0

Thankyou :) si j'utilise la deuxième solution de la vôtre, dans onConfigurationChanged() dans le cas le cas, je dois mettre xml disposition terre pour la classe d'adaptateur. Comment est-ce que je fais cela – Mark023

+0

Vous pouvez vérifier ce StackOverflow [réponse] (http://stackoverflow.com/a/17050108/1423876) lié à l'inflation de disposition après des changements de configuration. Il y a d'autres questions sur StackOverflow liées à l'inflation de mise en page afin que vous puissiez les vérifier et utiliser ce qui est le plus approprié pour votre objectif. – comrade

0

Vous pouvez simplement définir l'orientation de l'écran en fonction de votre activité perticular de façon à ce qu'il ne puisse pas pivoter. (si vous voulez) comme cette façon:

<activity android:name=".MainActivity" 
      android:screenOrientation="portrait"> 
    </activity>