2016-07-20 17 views
0

in meiner Anwendung (minSdkVersion 17, aber ich bin diesbezüglich flexibel), habe ich eine einzige Aktivität. Es zeigt eine Art Zeitplan an. Ich möchte den aktuellen Tag anzeigen lassen und zur richtigen Zeit scrollen. Diese Funktionalität funktioniert bereits einwandfrei.Android: Code ausführen, wenn App "aktiviert" ist, nicht auf Orientierung ändern

Ich möchte dies jedes Mal tun, wenn die App gestartet wird, oder jedes Mal, wenn die App wieder aktiv wird (z. B. nach Drücken der Home-Taste und erneutem Klicken auf das App-Symbol, ohne die App dazwischen zu löschen).

Aber ich will dies nicht tun, wenn das Gerät gedreht wird.

Zum Beispiel habe ich eine Methode:

private void scrollToNow() { 
    // do the calculation and scroll all views to the correct position 
    // this is code I already have fully functional! 
} 

Und ich will es die Aktivität wieder aktiv jedes Mal ausführen wird, aber nicht auf Orientierungsänderung.

Ich versuchte eine Menge Kombinationen (in onStart, onResume, onCreate), aber keiner von ihnen hat den Trick. Ich habe versucht, mithilfe von savedInstanceState eine Lösung zu erstellen, die jedoch fehlgeschlagen ist.

Hat jemand ein paar Tipps oder nützliche Links für mich?

Thanks a lot,

Oliver

Antwort

2

Bitte denken Sie zweimal darüber nach, bevor Sie Konfigurationsänderungen manuell überprüfen.

Wenn Ihre Anwendung während einer bestimmten Konfigurationsänderung keine Ressourcen aktualisieren muss und Sie eine Leistungseinschränkung haben, die das Neustarten der Aktivität verhindert, können Sie festlegen, dass Ihre Aktivität die Konfigurationsänderung selbst übernimmt verhindert, dass das System Ihre Aktivität neu startet.

Hinweis: Die Änderung der Konfiguration selbst kann die Verwendung alternativer Ressourcen erheblich erschweren, da das System sie nicht automatisch für Sie anwendet. Diese Technik sollte als letzte Möglichkeit betrachtet werden, wenn Sie Neustarts aufgrund einer Konfigurationsänderung vermeiden müssen und nicht für die meisten Anwendungen empfohlen werden.

versuchen, einige Flaggen in onSaveInstanceState und in onCreate überprüfen, um zu sparen, wenn es savedInstanceState, dann als Feld speichern Sie es zum Beispiel. Dadurch erhalten Sie Informationen darüber, ob die Aktivität "neu erstellt" wurde oder nicht. Dann wird in 'onResume' geprüft, ob dieses Flag gesetzt ist oder nicht. Wenn nicht, dann werden Sie nicht Ihre Aktivität "neu erstellt", so können Sie scrollToNow()

+0

Ich denke, ich habe das schon versucht, aber in diesem Fall, wenn ich mich richtig erinnere, bekam ich sogar diese Flagge, wenn die Aktivität aus einem anderen Grund als der Orientierungsänderung zerstört wurde. Ich werde es nochmal versuchen. Vielen Dank! –

+0

ok, ich habe es erneut getestet, und onCreate wird nur mit einer Bundle-Instanz aufgerufen und nur dann, wenn sich die Ausrichtung ändert. Ich habe die folgenden Fälle getestet: neuer App-Start, Drücken der Home-Taste, Zurückgehen zur App mit/ohne Töten. Ich glaube, ich habe einen Fehler gemacht, als ich es versuchte. Ich denke, ich habe vergessen, die Flagge einmal onResume wurde zurückgesetzt. –

1

Ich möchte nicht das Layout neu erstellen, wenn die Bildschirmausrichtung ändern

Haben Sie diese Zeile in AndroidManifest.xmlandroid:configChanges="screenLayout|screenSize|orientation" so hinzuzufügen versucht:

<activity 
     android:name="youractivity" 
     android:configChanges="screenLayout|screenSize|orientation" 
     android:label="@string/title_activity_create_note" 
     android:theme="@style/AppTheme" 
     android:windowSoftInputMode="stateAlwaysHidden" /> 

Für weitere Informationen können Sie sich ansehen: manifest/activity-element auf dieser Seite gehen Sie zu android: configChanges Abschnitt und lesen Sie bitte.

Wenn Sie dies hinzufügen, müssen Sie Methode selbst statt Android System behandeln.

Bitte lesen Sie Abschnitt in dieser Seite Hinweis:

Hinweis: Dieses Attribut sollte nur als letztes Mittel vermieden und verwendet werden. Bitte lesen Sie Handling Runtime Changes für weitere Informationen darüber, wie man einen Neustart aufgrund einer Konfigurationsänderung richtig behandelt.

Auch verwende ich dies in meiner Anwendung vielleicht können Sie dies versuchen: android:screenOrientation="nosensor" in dieser Seite findet man es Informationen über finden.

+0

aufrufen Ich denke, an einem Punkt habe ich versucht mit 'android: configChanges', aber wie ich mich erinnere, enthielt nur zwei der Werte (vielleicht für eine ältere SDK-Version?). Mit allen drei funktioniert es perfekt, vielen Dank! –

+0

@OliverMeyer Ich glaube, dass das Orientierungsattribut fehlte, weil Sie bei der Änderung Ihrer Telefonausrichtung auf dieses Problem (?) Stoßen. Auch ein anderer Weg hinzugefügt, den ich in meiner Anwendung verwende, vielleicht kannst du es auch versuchen. –