En ViewPager, al deslizar a la 3ª pestaña, el fragmento secundario en tab1 desaparece

Tengo 3 lengüetas en un FragmentStatePagerAdapter. Tengo un fragmento para la pestaña 1 que agrega vistas a su contenedor 'linearlayout' dentro de un diseño relativo dinámicamente. I añadir dinámicamente algunas vistas en la pestaña 1 fragmento. También agregué un fragmento completo en ese contenedor linearLayout con otras vistas arriba y abajo. Esto funciona bien .. todo bien.

Pero cuando voy a la 3 ª página y volver. Todas las vistas están allí. Pero ese fragmento completo ha desaparecido ~~ EDIT
Se desvanece de tab1 y aparece debajo de las vistas en tab2 donde se agrega otro childfragment.

En primer lugar tengo un listFragment en tab1 y tab2. Basado en listItem haga clic en i cargar un fragmento en cada pestaña, que ambos fragmentos en tab1 y 2 infla lo mismo debajo de xml y añade vistas dinámicas, pero en algunos casos añado un fragmento completo en lugar de una vista en el diseño lineal dado en xml. Problema surgió cuando tengo que agregar dos fragmentos en ambos nuevos fragmentos añadidos en la pestaña 1 y tab2, después de que sólo había listas, y se desliza a tab3. Al regresar. Fragmento en 'tab1 principal fragmento' desapareció y apareció por debajo del fragmento en 'tab2 principal fragmento'

Este es el viewpager, en el que i cambiar diferentes fragmentos por el método setItem (fragmento, posición):

public static class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { public static ArrayList<Fragment> tabs_fragments = new ArrayList<Fragment>( 3); public ScreenSlidePagerAdapter(FragmentManager fm, ArrayList<Fragment> tabs) { super(fm); ScreenSlidePagerAdapter.tabs_fragments = tabs; } @Override public Fragment getItem(int arg0) { return tabs_fragments.get(arg0); } @Override public int getCount() { return tabs_fragments.size(); } @Override public int getItemPosition(Object object) { if (tabs_fragments.contains(object)) { return POSITION_UNCHANGED; } return POSITION_NONE; } public static void setItem(Fragment fr, int position) { if (position <= 2 && position >= 0) { tabs_fragments.remove(position); tabs_fragments.add(position, fr); } else Log.d("adding tab", "wrong tab position to add fragment at"); } } 

Así es como añado mi fragmento a linearlayout donde 'll' es el diseño lineal dentro de la distribución relativa, que es el contenido real para el fragmento en tab1

 ll.addView(getTitle("Set Message Receive Settings")); // View smsRecLayout = inflater.inflate(R.layout.fr_ev_sms_receive, // container, false); Bundle b = new Bundle(); b.putInt("id", eventId); b.putInt("event", eventTypeId); Fragment fr = new FrEv_SMSReceive(); fr.setArguments(b); getFragmentManager().beginTransaction() .add(ll.getId(), fr, "fr_sms_receive").commit(); 

Este es el diseño del fragmento donde se agrega otro fragmento en formato lineal 'fr_event_container'. FragmentStatePagerAdapter

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".EventDetails" > <TextView android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:gravity="center_horizontal" android:padding="10dp" android:textIsSelectable="false" /> <ScrollView android:id="@+id/fr_event_container_scroll" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_above="@+id/sep1" android:layout_alignParentLeft="true" android:layout_below="@+id/title" > <LinearLayout android:id="@+id/fr_event_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > </LinearLayout> </ScrollView> <View android:id="@+id/sep1" android:layout_width="fill_parent" android:layout_height="2dp" android:layout_above="@+id/addOther" android:layout_centerHorizontal="true" android:layout_margin="10dp" android:background="#000" android:padding="10dp" android:visibility="gone" /> <Button android:id="@+id/next" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/addOther" android:layout_alignBottom="@+id/addOther" android:layout_alignParentRight="true" android:layout_marginRight="54dp" android:text="Next" android:width="90dp" /> 

El ViewPager tiene un límite máximo de página fuera de pantalla. Puede configurarlo más alto con setOffscreenPageLimit(int)

He llegado a saber que el problema estaba en usar la misma disposición para ambas lengüetas sin cambiar su identificación en el setId ejecución por setId ;

Aunque los fragmentos estaban en diferentes pestañas, pero Android estaba tratando el diseño que primero se agregó como principal, así que si agregué un fragmento en tab2 después de tab1, entonces cualquier cosa agregada en tab2 o tab2 versión de ese diseño iba en tab1 (primero agregado) .

He cambiado layoutIds en tiempo de ejecución y el problema se resuelve.

  • ¿Cómo evitar recrear Fragment en ViewPager?
  • Actualizar datos en ListFragment como parte de ViewPager
  • Android Definir texto de TextView en fragmento que está en FragmentPagerAdapter
  • Actividad de inicio de Fragmento causa NullPointerException
  • Android: intenta invocar el método virtual 'void android.support.v4.app.Fragment.setMenuVisibility (boolean)' en una referencia de objeto nulo
  • IllegalArgumentException: el radio debe ser> 0
  • Error: El constructor MainActivity.ScreenSlidePagerAdapter (FragmentManager) no está definido
  • 2 ViewPager no se desplaza en Android 2.3
  • Diferencia entre FragmentPagerAdapter con ViewPager con OffScreenLimit establecido en 1 y FragmentStatePagerAdapter?
  • Caché de ActionBarSherlock + ViewPager más que sólo vista anterior / siguiente
  • Toque los Listeners para las vistas de padres y niños
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.