Dónde llamar a getChildFragmentManager ()?

Problema

De acuerdo con los documentos de Google:

Ahora puede incrustar fragmentos dentro de fragmentos. Esto es útil para una variedad de situaciones en las que se desea ubicar componentes de interfaz de usuario dinámicos y reutilizables en un componente de interfaz de usuario que sea dinámico y reutilizable. Por ejemplo, si utiliza ViewPager para crear fragmentos que pasan a la izquierda y la derecha y consumen la mayoría del espacio de la pantalla, ahora puede insertar fragmentos en cada página de fragmentos. Para anidar un fragmento, simplemente llame a getChildFragmentManager () en el fragmento en el que desea agregar un fragmento. Esto devuelve un FragmentManager que puede utilizar como lo hace normalmente desde la actividad de nivel superior para crear transacciones de fragmentos. Por ejemplo, aquí hay algún código que agrega un fragmento dentro de una clase de fragmento existente:

Fragment videoFragment = new VideoPlayerFragment(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(R.id.video_fragment, videoFragment).commit(); 

Así que tuve (por ejemplo) TestFragment que se parece a:

 public class TestFragment extends Fragment { private View mFragmentView; private FrameLayout mFrameLayout; public HistoryFragment() { super(); } @Override public View onCreateView(LayoutInflater pInflater, ViewGroup pViewGroup, Bundle pBundle) { mFragmentView = pInflater.inflate(R.layout.fragment_layout, pViewGroup, false); mFrameLayout = (FrameLayout) mFragmentView.findViewById(R.id.framelayout); return mFragmentView; } public void onDestroyView() { super.onDestroyView(); } /* ISSUE */ public void doSomethingSpecial() { FragmentManager tFragmentManager = getChildFragmentManager(); } } 

En MainActivity inicializo mi fragmento como:

 mTestFragment = new TestFragment(); mTestFragment.doSomethingSpecial(); 

Luego paso el fragmento a ViewPager vía FragmentPagerAdapter .

Finalmente, tengo una excepción. Pero si sólo utilizo:

 mTestFragment = new TestFragment(); 

Entonces funciona.

Pregunta

¿Dónde debo llamar al método getChildFragmentManager() en mi fragmento? ¿Que estoy haciendo mal?

Si tienes un buen ejemplo de usar nuevos Fragmentos anidados de Android, comparte el enlace conmigo. Agradecería mucho su ayuda.

3 Solutions collect form web for “Dónde llamar a getChildFragmentManager ()?”

Respuesta corta: Llamo y uso getChildFragmentManager() en el método onViewCreated() mi Fragmento.

Por ejemplo:

 @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); addInnerFragment(); // This method does the getChildFragmentManager() stuff. } 

En realidad solo lo utilizo en el siguiente caso.

Intenté agregar un mapa a un ViewPager. Como sabrás, las "páginas" en el ViewPager son Fragmentos, por lo que no pude usar este ejemplo de código utilizando mapas de una actividad . Yo estaba tratando de obtener el SupportMapFragment de la actividad haciendo cosas como:

 SupportMapFragment mapView = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map); 

Pero mapView siempre fue nulo, por lo que mi aplicación se bloquea.

Encontré la siguiente respuesta y funciona inmediatamente.

Esto puede ser un ejemplo útil donde usar getChildFragmentManager ()

Espero que esto puede ser útil.

Según los documentos , este método:

Devuelve un FragmentManager privado para colocar y administrar Fragmentos dentro de este Fragmento.

Así que puedes usarlo si quieres añadir / reemplazar un nuevo fragmento a tu fragmento existente, debes confirmar primero tu transacción de TestFragment, y luego añadirle el fragmento interno. Probar algo como esto:

  TestFragment mTestFragment = new TestFragment(); //get the activity's fragment manager to add the fragment FragmentTransaction transaction= getFragmentManager().beginTransaction(); transaction.add(R.id.container, mTestFragment).commit(); //add the inner fragment mTestFragment.doSomethingSpecial(); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.