PDA

Ver la Versión Completa : [ CONSULTA ] ¿Como mantener los EditText al rotar la pantalla?


LEAJIM_454
21/01/17, 22:54:08
Hola, espero no molestar, resulta en un fragment creo unos AppCompatEditText desde codigo y estas desaparecen al rotar la pantalla, ¿Cómo podría hacer para que se mantengan?.

kriogeN
21/01/17, 23:27:07
Se puede hacer de 2 maneras.

La más fácil es añadir en el Manifest, en la sección de la Activity que contiene el Fragment:

android:configChanges="orientation"

La más "complicada" (porque realmente también es fácil) es almacenar en el Bundle del evento "onSaveInstanceState" los datos que quieres mantener, y recuperarlos en el "onCreate". De esta manera también te funcionará en el caso de que por cualquier motivo se tenga que destruir la Activity y volver a construirse.

Se pueden combinar los 2 métodos.

Dexafree
22/01/17, 11:17:02
El configChanges siempre lo he visto como una "ñapa".
Si tuvieras layouts distintos en las dos orientaciones, podrias tener problemas.

La forma recomendada y correcta de hacerlo es con el onSaveInstanceState (que una vez coges el hábito, lo implementas para todas las pantallas para soportar rotacion, cambios de idioma...).

LEAJIM_454
22/01/17, 14:51:10
La más "complicada" (porque realmente también es fácil) es almacenar en el Bundle del evento "onSaveInstanceState" los datos que quieres mantener, y recuperarlos en el "onCreate". De esta manera también te funcionará en el caso de que por cualquier motivo se tenga que destruir la Activity y volver a construirse.

La forma recomendada y correcta de hacerlo es con el onSaveInstanceState (que una vez coges el hábito, lo implementas para todas las pantallas para soportar rotacion, cambios de idioma...).

Lo intenté de mil maneras pero no sé donde estoy fallando, el codigo que le añadí al onCreateView de mi fragment es este
if (savedInstanceState!=null){
Log.d("asd",savedInstanceState.getString("etiqueta_x"));
etiquetaX=savedInstanceState.getString("etiqueta_x");

eTEtiquetaX.setText(etiquetaX);
Toast.makeText(getActivity(), etiquetaX,Toast.LENGTH_SHORT).show();
}

Y esto hice en el metodo onSave onSaveInstanceState

@Override
public void onSaveInstanceState(Bundle outState){

outState.putString("etiqueta_x", eTEtiquetaX.getText().toString());

super.onSaveInstanceState(outState);
}

Lo más extraño de todo es que al rotar la pantalla el Tast y Log.d si me muestran lo que está en el AppCompatEditText más no lo pone en el AppCompatEditText.
Agradecería mucho su ayuda.

kriogeN
22/01/17, 18:06:59
Lo intenté de mil maneras pero no sé donde estoy fallando, el codigo que le añadí al onCreateView de mi fragment es este
if (savedInstanceState!=null){
Log.d("asd",savedInstanceState.getString("etiqueta_x"));
etiquetaX=savedInstanceState.getString("etiqueta_x");

eTEtiquetaX.setText(etiquetaX);
Toast.makeText(getActivity(), etiquetaX,Toast.LENGTH_SHORT).show();
}

Y esto hice en el metodo onSave onSaveInstanceState

@Override
public void onSaveInstanceState(Bundle outState){

outState.putString("etiqueta_x", eTEtiquetaX.getText().toString());

super.onSaveInstanceState(outState);
}

Lo más extraño de todo es que al rotar la pantalla el Tast y Log.d si me muestran lo que está en el AppCompatEditText más no lo pone en el AppCompatEditText.
Agradecería mucho su ayuda.

Asegurate que en algún sitio después no hagas un setText(""), es lo único que se me ocurre.

No tiene que ser en el onCreateView, puede ser en algo que ejecutas en el onStart o en el onResume.