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?

2 Solutions collect form web for “Layout duplicando a sí mismo en la rotación de la pantalla”

¡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(); } 
  • Se muestra una página en blanco cuando se abre el fragmento y se vuelve a colocar en el mismo fragmento
  • Cómo configurar el fondo de la barra de herramientas de contracción con el comportamiento personalizado para adaptarse a toda la pantalla
  • Establecer el logotipo de la barra de herramientas en XML
  • Superposición de contenido por encima de AppBarLayout utilizando nuevo diseño de material
  • Android: obtener el ancho de Layout programatically teniendo fill_parent en su xml
  • Google Maps v3 MapView no toma todas las vistas de los padres en Android
  • Cómo tener selectableItemBackground en Imageview?
  • ¿Cuál es el propósito de null en addToBackStack (null)?
  • Evite onMeasure y onLayout cada vez que ImageView Bitmap se establece
  • Disposición linear linear del androide dos artículos al lado de uno a
  • La adición dinámica de fragmentos con diseño xml a GridLayout no es workng
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.