2017-12-02 14 views
1

Ich habe eine Aktivität mit einem TextView und etwas Text drin. Ich habe android:freezesText="true" verwendet. Wenn der Bildschirm gedreht wird, bleibt der Text von der TextView erhalten. Wenn ich jedoch versuche, auf diesen Text mit textView.getText() zuzugreifen bekomme ich nichts, aber der Text ist auf dem Bildschirm. Kann ich auf diesen Text zugreifen? Wo ist es wirklich platziert, wenn nicht im TextEdit?Wie kann ich auf Text zugreifen, der von früheren Aktivitäten von freezestext übergeben wurde?

activity.xml:

<TextView 
    android:id="@+id/counterTV" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:freezesText="true" 
    tools:text="4" 
    style="@style/CounterTVStyle"/> 

Activity.java:

private int counterStart; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 
    counterTV = findViewById(R.id.counterTV); 
    Integer currCounter; 
    try { 
     currCounter = Integer.parseInt(counterTV.getText().toString()); 
    } catch (NumberFormatException e) { 
     currCounter = null; 
    } 
    counterStart = currCounter != null ? currCounter : 1; 
} 

ich Druck versucht, das Ergebnis von counterTV.getText(), und bekam eine leere Zeichenfolge.

Dank

+0

Bitte geben Sie Ihren Code ein – diegoveloper

+0

Überprüfen Sie meine Antwort unten :) – diegoveloper

Antwort

0

Ok, müssen Sie bis zum Layout warten, bis das Rendering abgeschlossen ist, also, wenn Sie den Wert Ihrer EditText nach Bildschirm drehen (und neu erstellen die Aktivität) erhalten möchten können Sie diesen Code verwenden:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 
    counterTV = findViewById(R.id.counterTV); 
    counterTV.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       counterTV.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
       Log.d("your_tag","Your value here : " + counterTV.getText().toString()); 
       Integer currCounter; 
       try { 
        currCounter = Integer.parseInt(counterTV.getText().toString()); 
       } catch (NumberFormatException e) { 
        currCounter = null; 
       } 
       counterStart = currCounter != null ? currCounter : 1; 
         } 
     }); 

} 

Wenn Sie nicht möchten, dass zu tun, und Sie brauchen nicht Ihre Activity recreate jedes Mal, dass Sie das Telefon drehen, können Sie dies in Ihrer Aktivität manifestieren könnte hinzufügen:

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

Die Aktivität LifeCycle, wenn der Bildschirm gedreht wird, ist wie folgt

onPause 
onSaveInstanceState 
onStop 
onDestroy 

onCreate 
onStart 
onRestoreInstanceState 
onResume 

//CODE BELOW 
@Override 
protected void onSaveInstanceState(Bundle bundle) 
{ 
    super.onSaveInstanceState(b); 
    bundle.putInt("counter",currCounter); 
} 


@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    if(savedInstanceState!=null) { 
     counter = savedInstanceState.getInt("counter"); 
    } 
} 

P. S: Sie müssen die Zählervariable global machen.

Verwandte Themen