2012-01-16 22 views
8

Estoy escribiendo una aplicación de marcación de teléfono para Android. Creé un diseño para el teclado, que contiene un TextView y 10 botones. Los botones son como teclas para 10 dígitos (0 a 9) y TextView es para mostrar el número de acuerdo con las teclas presionadas.El texto de TextView desaparece al girar el dispositivo

En mi aplicación, agrego el texto ("0" o "1", etc.) al TextView para cada botón presionado. Si presioné los botones 1, 2, 3, entonces el texto en TextView es 123. El problema es que vamos a tomar la pantalla está en modo horizontal y TextView contiene 123, si lo enciendo, en modo retrato no hay texto en TextView.

Por favor, ayuda al respecto.

+0

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

+1

¿Su TextView contiene id? ¿Usas fragmentos? – ania

+0

id está ahí pero no estoy usando fragmentos. –

Respuesta

5

Por favor, compruebe el cambio de orientación, en crear método se llama, que obliga a todos los puntos de vista que se creará de nuevo, por lo que es necesario utilizar uno de los métodos siguientes:

  1. uso del método onSavedInstance y guardar los estados de componentes/vistas a agrupar.
  2. Simplemente use la siguiente marca verdadera en su archivo de manifiesto en la etiqueta de actividad android: configChanges = "keyboardHidden | orientation". como a continuación:

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

La razón de esto se debe a Android básicamente destruir la actividad y la creación de nuevo cada vez que se gira el dispositivo. Esto es principalmente para permitir diferentes diseños basados ​​en el modo retrato/paisaje.

La mejor manera de manejar esto es almacenar los datos que necesite conservar dentro de la Actividad Bundle respondiendo al evento onSavedInstance (llamado justo antes de que Android destruya la actividad), y luego volver a aplicarlos en el evento onCreate estándar.

Aunque puede añadir "orientación" a la propiedad configChanges, tenga en cuenta que usted está diciendo básicamente Android que va a ser el manejo de todo lo relacionado con la orientación cambiarse a sí mismo - incluyendo el cambio de diseño, etc.

13

Lo que @jeet recomendado no funcionó para mí. Tuve que agregar "screenSize". Esta es la línea que debe añadir en su manifest.xml en el nodo de su actividad <activity>:

android:configChanges="keyboardHidden|orientation|screenSize" 

Por lo tanto, el nodo completa puede tener este aspecto:

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

Añadiendo 'screenSize' hizo el truco! Depuró el problema por varias horas y finalmente aquí hay una solución. – TranslucentCloud

+0

funciona muy bien ... –

0

Si alguien sigue teniendo problemas ... esto hizo el truco para mí

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

es, básicamente, guardar los valores que desee antes de la rotación (que es cuando se llama onSaveInstanceState) en un paquete y después de la rotación (onRestor eInstanceState) simplemente extrae todos los valores de Bundle. Solo para aclarar, TVNazivPodatka y TVEnotaMere son widgets de TextView.

... con una ayuda de How to prevent custom views from losing state across screen orientation changes

Cuestiones relacionadas