2016-07-12 6 views
0

Ich habe eine Adapter Klasse und eine MainActivity. Die Adapter Klasse zeigt die Liste der Kindernamen an und zeigt neben den Namen die time an, die sie in der Schule angekommen sind. Problem ist, wenn ich in Querformat drehen, sind die time Werte verloren.android: configChanges = "orientation | screenSize" ändert mein Layout Aussehen

als ich unter MainActivity

android:configChanges="orientation|keyboardHidden|screenSize" 

in meinem Manifest Hinzufügen Was das im Landschaftsmodus die Zeitwerte nicht aber das Aussehen des Layouts erscheint wie der Portrait-Modus gleichen verloren passiert ist. In Wirklichkeit sieht das Landschaftslayout ein wenig anders aus als im Hochformat.

Was mache ich in diesem Fall, um time Werte zu erhalten und auch das Aussehen des Landschaftslayouts beizubehalten.

Antwort

1

Es gibt 2 Möglichkeiten:

  1. Verwendung onSaveInstanceState(Bundle outState) Methode in Ihrer Aktivität oder Fragmente - Ihre Daten zu speichern und sie nach der Drehung wieder herzustellen (in onCreate(Bundle savedInstanceState) oder onRestoreInstanceState(Bundle savedInstanceState))

Beispiel:

@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. Verwenden Sie android: configChanges, wie Sie alrea dy Nutzungsänderungen selbst zu handhaben, aber Landschaft Layout nach der Drehung

Beispiel aufblasen:

@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(); 
    } 
} 

ziehe ich die erste Option und auch dies vorgeschlagen in Android guide.

+0

Thankyou :) wenn ich zweite Lösung von Ihnen verwenden, in onConfigurationChanged() unter, wenn Fall, ich brauche Layout-Land xml für die Adapter-Klasse festlegen. Wie mache ich das? – Mark023

+0

Sie können diese StackOverflow [Antwort] (http://Stackoverflow.com/a/17050108/1423876) im Zusammenhang mit Layout Inflation nach Konfigurationsänderungen überprüfen. Es gibt einige weitere Fragen zu StackOverflow in Bezug auf die Layout-Inflation, so dass Sie sie überprüfen und verwenden können, was für Ihren Zweck zutreffender ist. – comrade

0

Sie können einfach die Bildschirmausrichtung auf Hochformat für Ihre Aktivität einstellen, so dass sie nicht gedreht werden kann. (wenn Sie möchten) wie auf diese Weise:

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