2012-01-16 18 views
8

Piszę aplikację telefoniczną dla Androida. Stworzyłem układ klawiatury, który zawiera przycisk TextView i 10 przycisków. Przyciski są jak klawisze dla 10 cyfr (od 0 do 9), a TextView służy do wyświetlania numeru zgodnie z naciśniętymi klawiszami.Tekst TextView znika po obróceniu urządzenia

W mojej aplikacji dołączam tekst ("0" lub "1" itd.) Do TextView dla każdego naciśniętego przycisku. Jeśli nacisnąłem przyciski 1, 2, 3, tekst w TextView to 123. Problem jest, Załóżmy, że ekran jest w trybie poziomym, a TextView zawiera 123, jeśli go obracam, w trybie portretowym bez tekstu w TextView.

Proszę mi pomóc W odniesieniu do tego.

+0

Odjazd ten http: // stackoverflow.com/questions/3542333/how-to-prevent-custom-views-from-losing-state-across-screen-orientation-changes/3542895 # 3542895 – om252345

+1

Czy twój TextView zawiera identyfikator? Czy używasz fragmentów? – ania

+0

id istnieje, ale nie używam fragmentów. –

Odpowiedz

5

proszę sprawdzić na zmianę orientacji na tworzenie metoda jest wywoływana, który wymaga, aby wszystkie poglądy zostać ponownie utworzone, więc trzeba użyć jednej z następujących metod:

  1. użyć metody onSavedInstance i zapisywać stany komponentów/widoków do pakunku.
  2. Wystarczy użyć następującej flagi true w pliku manifestu w tagu aktywności android: configChanges = "keyboardHidden | orientation". jak poniżej:

    <activity android:name=".SampleActivity" android:label="@string/app_name" 
        android:configChanges="keyboardHidden|orientation"> 
        ... 
    </activity> 
    
7

Powodem jest to spowodowane Android zasadzie niszczy aktywność i tworzenie go ponownie przy każdym obróceniu urządzenia. Ma to głównie na celu umożliwienie różnych układów w zależności od trybu portret/krajobraz.

Najlepszym sposobem radzenia sobie z tym jest przechowywanie niezależnie od danych trzeba zachować w ramach działalności Bundle, odpowiadając na razie onSavedInstance (tzw tuż przed Android niszczy aktywności), a następnie ponowna instalacja tych w standardowym przypadku onCreate.

Chociaż może dodać „orientacji” do właściwości configChanges, należy pamiętać, że jesteś w zasadzie Android informujące, że masz zamiar zostać obsługi wszystkiego, co dotyczy orientacji zmienić siebie - w tym zmieniając układ, itp

13

Co zalecił program @jeet, nie działa dla mnie. Musiałem dodać "screenSize". Jest to linia należy dodać w swoim manifest.xml w węźle <activity> swojej działalności:

android:configChanges="keyboardHidden|orientation|screenSize" 

Zatem kompletny węzeł może wyglądać następująco:

<activity 
android:name=".YourActivity" 
android:label="@string/app_name" 
android:configChanges="keyboardHidden|orientation|screenSize" 
android:theme="@style/AppTheme.NoActionBar"> 
+0

Dodanie 'screenSize' rozwiązało problem! Debugowałem problem przez kilka godzin, a na końcu tutaj jest rozwiązanie. – TranslucentCloud

+0

działa świetnie ... –

0

Jeśli ktoś nadal kłopoty ... to wystarczyły mi

public class BranjeKP extends AppCompatActivity { 

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

    //... 
} 

@Override 
protected void onSaveInstanceState(Bundle out) { 
    super.onSaveInstanceState(out); 
    out.putString("TVNazivPod", TVNazivPodatka.getText().toString()); 
    out.putString("TVEnotaMere", TVEnotaMere.getText().toString()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle in) { 
    super.onRestoreInstanceState(in); 
    TVNazivPodatka.setText(in.getString("TVNazivPod")); 
    TVEnotaMere.setText(in.getString("TVEnotaMere")); 
} 

zasadniczo zapisać wszelkie wartości, które chcesz przed obrotem (wtedy onSaveInstanceState nazywa) w kłębek i po obrocie (onRestor eInstanceState) po prostu wyciągasz wszystkie wartości z Pakietu. Aby wyjaśnić, TVNazivPodatka i TVEnotaMere są widżetami TextView.

... z pomocą How to prevent custom views from losing state across screen orientation changes

Powiązane problemy