Tratamiento de fragmento y ver paginador: no se puede cambiar la etiqueta de fragmento AND Entrada recursiva para ejecutarPendingTransactions

En primer lugar, sé que estos temas se han creado mucho tiempo en stackoverflow, pero no he encontrado la solución a mis problemas. En segundo lugar, soy francés, así que mi inglés no es perfecto, lo siento por adelantado y dígame si usted no entiende algo. Y para terminar esta introducción, es la primera vez que estoy tratando con fragmentos, así que, lo siento si hay algo que no tengo bien entender!

Tengo tres botones, que permiten cambiar entre tres fragmentos. Dentro de uno de estos fragmentos, tengo un buscapersonas con dos fragmentos. Por el momento, cada fragmento (hay 5), sólo contiene un TextView. Estoy usando la última versión de android-support-v4 (he leído un montón de temas en stackoverflow que dicen que la última versión de soporte resuelve el error "Recursive entry to executePendingTransactions" que tengo).

Mis dos problemas:

  • Cuando hago clic dos veces en un botón, tengo una IllegaleStateException "no se puede cambiar la etiqueta de fragmento". Fui capaz de arreglar eso mediante la creación de un nuevo fragmento en el método onButtonSelected, pero no quiero recrear el fragmento cada vez, por razones de memoria y por razones funcionales: fragmento tiene que mantener su estado. Este problema no es mi problema principal, de hecho, sé que para desactivar el botón cuando el usuario ya está en el fragmento es posible, pero es extraño tener una excepción cuando esta gestión no se hace, no?

  • Cuando salgo del fragmento con el paginador de vista, y vuelvo a este fragmento, tengo una IllegalStateException "Entrada recursiva para ejecutarPendingTransactions". Puedo fijar esto fijando mi adaptador en un manipulador, o utilizar FragmentStatePagerAdapter en vez de FragmentPageAdapter (vea fragmento del fragmento de la exhibición dentro de un fragmento ), pero incluso si mi uso no se cae, cuando vuelvo a mi fragmento con el paginador de la visión, El buscapersonas de vista ha desaparecido!

Me puedes ayudar ?

Código fuente de Java es abajo, el código fuente de diseño es, creo, inútil.

Actividad principal :

public class MainActivity extends SherlockFragmentActivity{ private SherlockFragment fragmentOne, fragmentTwo, fragmentThree; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // this.fragmentOne = new fragmentOne(); // this.fragmentTwo = new fragmentTwo(); // this.fragmentThree = new fragmentThree(); // Call new or instanciate ? What's the correct way ? this.fragmentOne = (SherlockFragment) SherlockFragment.instantiate(this, FragmentOne.class.getName()); this.fragmentTwo = (SherlockFragment) SherlockFragment.instantiate(this, FragmentTwo.class.getName()); this.fragmentThree = (SherlockFragment) SherlockFragment.instantiate(this, FragmentThree.class.getName()); // Add fragment FragmentTransaction transaction = ( this.getSupportFragmentManager().beginTransaction() ); transaction.add( R.id.tab_fragment, this.fragmentOne, this.fragmentOne.toString() ); transaction.commit(); } public void onButtonSelected(View v){ switch (v.getId()){ case R.id.button_one_tab:{ showFragment(this.fragmentThree); break; } case R.id.button_two_tab:{ showFragment(this.fragmentOne); break; } case R.id.button_three_tab:{ showFragment(this.fragmentTwo); break; } default:{ break; } } } public void showFragment(SherlockFragment fragmentToShow){ FragmentTransaction transaction = ( this.getSupportFragmentManager().beginTransaction() ); transaction.replace(R.id.tab_fragment, fragmentToShow, fragmentToShow.toString()); transaction.commit(); } } 

Fragmento dos y tres sólo inflar un diseño que sólo contiene un TextView. Fragmento uno (tenga en cuenta que estoy usando un direccionalViewPager – un lib – en lugar de un ViewPager):

 public class FragmentOne extends SherlockFragment{ private FragmentOneAdapter fragmentOneAdapter; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Set up the pager final DirectionalViewPager pager = (DirectionalViewPager)getActivity().findViewById(R.id.pager); if (this.fragmentOneAdapter== null){ this.fragmentOneAdapter= new FragmentOneAdapter (getActivity().getSupportFragmentManager()); } pager.setAdapter(fragmentOneAdapter); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_landing_page, container, false); } 

FragmentOneAdapter:

 public class FragmentOneAdapter extends FragmentPagerAdapter{ private ArrayList<SherlockFragment> fragmentsList; public FragmentOneAdapter(FragmentManager fragmentManager) { super(fragmentManager); SherlockFragment fragmentFour = new FragmentFour(); SherlockFragment fragmentFive = new FragmentFive(); this.fragmentsList = new ArrayList<SherlockFragment>(); this.fragmentsList.add(fragmentFour); this.fragmentsList.add(fragmentFive); } @Override public Fragment getItem(int position) { return this.fragmentsList.get(position); } @Override public int getCount() { return this.fragmentsList.size(); } } 

Gracias por adelantado por tu ayuda!

One Solution collect form web for “Tratamiento de fragmento y ver paginador: no se puede cambiar la etiqueta de fragmento AND Entrada recursiva para ejecutarPendingTransactions”

He resuelto mi problema!

Simplemente reemplazo getSupportFragmentManager() en FragmentOne para getChildFragmentManager() . Luego, he editado el onButtonSelected mi onButtonSelected creando una nueva instancia de fragmento cada vez en vez de usar mis tres instancias diferentes (si no hago eso, tengo una excepción: java.lang.IllegalStateException: Activity has been destroyed ).

Todavía tengo un problema con esta solución: pierdo el estado de cada fragmento cada vez que estoy cambiando entre fragmentOne , fragmentTwo y fragmentThree . ¿Tienes una solución para eso?

  • ViewPager dentro de Fragmento con márgenes y el transformador de página no se representa correctamente
  • Diseñe una HorizontalScrollView dentro de ViewPager o use fragmentos:
  • Outofmemeoryerror (viewpager + visiones de imagen)
  • Infinite Scrolling Image ViewPager
  • Corregir la animación de un ViewPager circular
  • ¿Es posible acceder al Fragmento actual que está siendo visualizado por un ViewPager?
  • Anchos diferentes de diseños de Android en ViewPager
  • ViewPager en DialogFragment - IllegalStateException: Fragmento no tiene una vista
  • ¿Cómo implementar un gesto de deslizamiento entre fragmentos?
  • NoClassDefFoundError en DirectionalViewPager usando
  • ActionBar y ViewPager y CursorLoader funciona, pero tal vez hay mejor manera
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.