2012-08-30 9 views
9

Tengo un ListFragment donde utilizo un adaptador personalizado para llenar la vista de lista. Todo está bien hasta que cambie de orientación y desplazamiento. Entonces se ve así: ListView after a few orientation changesDuplicación de filas de vista de lista en el fragmento de lista en el cambio de orientación

Supongo que tiene algo que ver conmigo mientras busco un titular de la vista, pero no puedo acceder al código ahora mismo.

+0

posible duplicado de [Vista de lista de Android ListFragment que se superpone en el cambio de orientación] (http://stackoverflow.com/questions/11209412/android-listfragment-list-view-overlapping-on-orientation-change) – Qw4z1

Respuesta

14

La razón para el fragmento de superposición fue que utilicé FrameLayout y agregó el fragmento con FragmentTransition.add (...). Cuando cambié .add() por .replace() el fragmento anterior se eliminó y se agregó el nuevo y se solucionó mi problema.

0

cambio de orientación provoca onCreate para reiniciar a menos que incluya este método

public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
} 

y poner esto en la sección de actividad de su manifiesta

android:configChanges="orientation" 
+0

Sí, pero el La pregunta era por qué se superpone al viejo diseño. Y la respuesta a eso está en la pregunta duplicada. Gracias por el consejo de todos modos! – Qw4z1

2

Tuve un problema similar y estoy diciendo que la solución es: - está recibiendo este desenfoque porque cada vez que se cambia de orientación en algún lugar se crea una nueva instancia de listfragment (puede estar en oncreate()), entonces solo tiene que hacer una instancia del fragmento de la lista una vez y al cambiar la orientación, reemplace ese fragmento en lugar de volver a agregarlo.

0

Compruebe que esta es la primera vez que se llama onCreate(), en otras palabras, determine si la devolución de llamada no se debe a la rotación de la pantalla.

protected void onCreate(Bundle savedInstanceState) { 
     if(savedInstanceState == null) { 
    // transition.add(Your fragment,...) 
    } 
} 
0

que tenían el mismo problema, y ​​su debido al uso FrameLayout, Primero hay que comprobar si el fragmento ya se ha añadido a la actividad:

String TagName = "F"; 

Adición de un fragmento sin una IU Si desea obtener el fragmento de la actividad más adelante, debe usar findFragmentByTag(). "Google" http://developer.android.com/guide/components/fragments.html#Adding

Fragement F = getFragmentManager().findFragmentByTag(TagName); 

Entonces comprobar

if(F == null) { 
    F = new F(); 
    getFragmentManager() 
    .beginTransaction() 
    .add(R.id.container, F, TagName) 
    .commit(); 
} 

el objetivo aquí es para evitar la adición o la creación de nueva instancia del fragmento, que persisten durante el cambio de configuración que hace que el problema cuando se utiliza el FrameLayout como contenedor.

Solución 2 (Simple): Lo único que tiene que hacer aquí es cambiar su contenedor a ex: LinearLayout, y eso es todo. pero en mi opinión esta no es la mejor solución debido a las múltiples instancias del fragmento.

Espero que esta ayuda;

Cuestiones relacionadas