2012-01-16 13 views
8

Sto scrivendo un'app di connessione telefonica per Android. Ho creato un layout per tastiera, che contiene un TextView e 10 pulsanti. I pulsanti sono come tasti per 10 cifre (da 0 a 9) e TextView serve a visualizzare il numero in base ai tasti premuti.Testo di TextView che scompare quando il dispositivo è ruotato

Nella mia app, sto aggiungendo il testo ("0" o "1", ecc.) A TextView per ogni pulsante premuto. Se ho premuto i pulsanti 1, 2, 3, il testo su TextView è 123. Il problema è, prendiamo lo schermo è in modalità orizzontale e TextView contiene 123, se lo accendo, in modalità verticale nessun testo su TextView.

Please Help Me About this.

+0

controllare questo http: // StackOverflow.it/questions/3542333/how-to-avoid-custom-views-from-lose-state-across-screen-orientation-changes/3542895 # 3542895 – om252345

+1

Il tuo TextView contiene id? Usi i frammenti? L'ID – ania

+0

esiste ma non sto usando i frammenti. –

risposta

5

Per favore controlla sul cambiamento di orientamento, sulla creazione di metodo viene chiamato, che impone a tutti i punti di vista da creare di nuovo, quindi è necessario utilizzare uno dei seguenti metodi: metodo onSavedInstance

  1. uso e salvare gli stati di componenti/viste al pacchetto.
  2. Basta usare il seguente flag true nel file manifest in activity tag android: configChanges = "keyboardHidden | orientation". come di seguito:

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

La ragione di questo è dovuto al Android fondamentalmente distruggere l'attività e la creazione di nuovo ogni volta che si ruota il dispositivo. Questo è principalmente per consentire diversi layout in base alla modalità verticale/orizzontale.

Il modo migliore per gestire questa situazione è quello di memorizzare qualsiasi dato è necessario mantenere nell'ambito dell'attività Bundle, rispondendo alla manifestazione onSavedInstance (chiamato poco prima di Android distrugge l'attività), e poi riapplicare quelli in caso onCreate standard.

Anche se è possibile aggiungere "orientamento" alla proprietà configChanges, tenere a mente che si sta praticamente dicendo Android che si sta andando ad essere la manipolazione tutto ciò che riguarda l'orientamento cambiare se stessi - compreso il cambiamento di layout, ecc

13

Quello che @jeet ha consigliato non ha funzionato per me. Ho dovuto aggiungere "screenSize". Questa è la linea che si dovrebbe aggiungere nel vostro manifest.xml nel nodo della vostra attività <activity>:

android:configChanges="keyboardHidden|orientation|screenSize" 

Quindi, il nodo completo può apparire come segue:

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

L'aggiunta di 'screenSize' ha funzionato! Risolvi il problema per diverse ore e finalmente ecco una soluzione. – TranslucentCloud

+0

funziona alla grande ... –

0

Se qualcuno continua ad avere problemi ... questo ha fatto il trucco per me

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")); 
} 

che, fondamentalmente, di salvare tutti i valori che si desidera prima rotazione (in quel momento che onSaveInstanceState viene chiamato) in un fascio e dopo la rotazione (onRestor eInstanceState) togli tutti i valori dal pacchetto. Giusto per chiarire, TVNazivPodatka e TVEnotaMere sono widget TextView.

... con un aiuto da How to prevent custom views from losing state across screen orientation changes

Problemi correlati