2017-05-08 1 views
0

Ich kann nicht in der Lage sein, die Ansicht meiner Layouts nach der ersten Initialisierung der Android-App in onCreate(null) zu ändern, wenn ich die App zu minimieren und wieder öffnen onCreate(savedInstanceState), alle meine Funktionen wie setText scheinen nichtKann Ansichten in OnCreate nicht ändern, wenn übergeben savedInstanceState

enter image description here

package com.example.www.i_fucking_hate_java; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.EditText; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (savedInstanceState == null) 
     { 
      // this will work 
      ((EditText) findViewById(R.id.editText)).setText("Good afternoon"); 
      Log.d("Me", "Running 1 " + ((EditText) findViewById(R.id.editText)).getText().toString()); 
     } 
     else 
     { 
      // k so we have an old instance, 
      // problem is now our "handles" to our EditTexts are useless 

      // THIS WILL NOT WORK ?????????????????????????????????????????? 
      // the value returned by getText is correct, but the emulator display 
      // does not change - also I hate android 
      ((EditText) findViewById(R.id.editText)).setText("Good night"); 
      Log.d("Me", "Running 2 " + ((EditText) findViewById(R.id.editText)).getText().toString()); 
     } 

//  // this will work 
//  ((EditText) findViewById(R.id.editText)).setText("Good morning"); 
//  Log.d("Me", "Running 3 " + ((EditText) findViewById(R.id.editText)).getText().toString()); 
    } 
} 

Warum ist meine App auf „Guten Tag“ zu stecken Materie und nicht „Gute Nacht“, wie er nach dem Logger angezeigt wird?

+0

Versuchen Verwendung in folgenden Weise Stapel siehe [http://stackoverflow.com/questions/16769654/how-to-use-onsaveinstancestate-and-onrestoreinstancestate] – Arjun

Antwort

2

Im Standardzustand der Ansicht wird gespeichert und wiederhergestellt in onRestoreInstanceState. als onRestoreInstanceState Anruf nach onCreate sogar ändern Sie Ihren Text in onCreate es wird wieder zurück zu speichern Zustand in onRestoreInstanceState.

Ihre Lösung ist Ihrer Ansicht nach Wiederherstellung von onCreate zu onRestoreInstanceState

bewegen, wenn onRestoreInstanceState nennen?

Diese Methode wird zwischen onStart() und onPostCreate (Bundle) genannt.

Wie Ihre Aktivität zu stoppen beginnt, ruft das System den onSaveInstanceState() -Methode, um Ihren Aktivitätszustand Informationen mit einer Sammlung von Schlüssel-Wert-Paaren zu speichern. Die Standardimplementierung dieser Methode speichert vorübergehende Informationen über den -Status der Ansichtshierarchie der Aktivität, z. B. den Text in einem Widget EditText oder die Bildlaufposition eines ListView-Widgets. Ihre App sollte den onSaveInstanceState() - Callback nach der onPause() -Methode und vor onStop() implementieren. Implementieren Sie diesen Rückruf in onPause() nicht.

Für weitere Informationen Documentation

+0

Wo ist die Dokumentation das heißt "Im Standardzustand der Ansicht wird in onRestoreInstanceState gespeichert und wiederhergestellt" – AlanSTACK

+0

Es bezieht sich auf lifeCycle (in Ihrem Fall Aktivität lifeCycle) im Falle, dass Drehung diese Aktivität zu zerstören und neu zu erstellen geändert wird, wird alle Wert in onSaveInstance speichern und in onRestoreInstance wiederherstellen, Sie können dieses Verhalten von der Manifestdatei aus ändern. –

+0

@Alan sehe meine Bearbeitung und Fett Teil –

Verwandte Themen