Layout duplicando a sí mismo en la rotación de la pantalla

Tengo un diseño que tiene un EditText y un botón. Lo <include> en mi diseño principal.

Tengo un problema extraño con el diseño y la rotación. Parece duplicarse cuando el dispositivo (físico) se rota, desordenando el texto y el diseño.

Aquí está en la primera abierta, después de que añada un cierto garble adicional:

1

DSC_0013 se encuentra en el EditText al iniciar el fragmento.

A continuación, girar el teléfono y añadir algunos diferentes garble:

2

Y usted puede ver el tema bastante claro. Al principio, pensé que era sólo el EditText estropear. Pero si agrego el texto suficiente para hacer una nueva línea:

3

Puedo ver que el botón se desordena demasiado.

Hago sobrescribir onSaveInstanceState , pero en él no toco el EditText o su valor, se utiliza estrictamente para otra cosa.

¿Qué está sucediendo y cómo lo arreglo?

¡Arreglado!

Resulta que no se duplicaba la vista, ni el EditText, ni el Button. Era el fragmento entero.

En el onCreate mi actividad, agrego el fragmento a un diseño xml:

 private FileDetails fileDetailsFragment; public void onCreate(Bundle savedInstanceState) { ... FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); fileDetailsFragment = new FileDetails(fileData); fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment); fragmentTransaction.commit(); 

Y onCreate se llamaba cada vez que giraba el teléfono (como está destinado a). Así que puse un cheque para ver si la actividad se está ejecutando por primera vez, y funciona muy bien.

 private FileDetails fileDetailsFragment; public void onCreate(Bundle savedInstanceState) { ... if (savedInstanceState == null) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); fileDetailsFragment = new FileDetails(fileData); fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment); fragmentTransaction.commit(); } else { fileDetailsFragment = (FileDetails) getSupportFragmentManager().findFragmentById(R.id.DetailsHolder); } 

También puedes setRetainedInstance (true) en tu fragmento, luego intenta obtener el Fragmento de FragmentManager.findFragmentById (int) o FragmentManager.findFragmentByTag (String), y si devuelve null significaba que debías crear una nueva instancia de tu Fragmento .

 private FileDetails fileDetailsFragment; public void onCreate(Bundle savedInstanceState) { ... FragmentManager fragmentManager = getSupportFragmentManager(); fileDetailsFragment = (FileDetails) getSupportFragmentManager().findFragmentById(R.id.DetailsHolder); if (fileDetailsFragment == null) { fileDetailsFragment = new FileDetails(FileData); } FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment); fragmentTransaction.commit(); } 
  • Cómo ocultar la barra de título de una actividad en XML con el tema personalizado existente
  • RecyclerView.ViewHolder no puede vincular la vista con ButterKnife
  • Pie de página debajo de la vista de lista fija en la parte inferior de la pantalla
  • Encontrar la ubicación de píxeles del elemento ListView parece devolver un valor incorrecto
  • Cómo colocar un LinearLayout debajo de un LinearLayout dentro de otro RelativeLayout?
  • Cómo mostrar el diseño moviéndose de izquierda a derecha con velocidad lenta
  • Android TV: VerticalGridFragment sombra dimensión y color
  • FitsSystemWindows efecto ido para fragmentos añadidos a través de FragmentTransaction
  • Cómo crear un mapa de bits cuadrado de un mapa de bits rectangular en Android
  • Configuración del paquete de soporte de Android v7 para eclipse - GridLayout
  • Retrato para teléfono, paisaje para Tablet (Android-Layout)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.