Android: ¿Puedes anidar Fragmentos?

¿Es posible pegar un Fragment en el diseño de otro Fragment ? ¿Alguien ha intentado esto?

¡Finalmente! La actualización de Android 4.2 viene con soporte predeterminado para fragmentos anidados, también compatible: NestedFragments oficial . Lo que es más, el apoyo de los Fragmentos anidados en anunciado en la última revisión 11 de la biblioteca de soporte v4 !

No, los fragmentos NO están actualmente en una jerarquía. Tratar de tener un fragmento incrustado en otro puede conducir a problemas, a menudo sutiles.

Editar: A partir de ACLv11 esto sólo es necesario si replace(...) ViewPagers dinámicamente.

Sí se puede, pero hay ciertas maneras que son un dolor, pero incluso he incrustado FragmentViewPagers.

Si se incrusta en XML, entonces cuando el diseño se infla no tendrá problemas.

Si incrusta fragmentos dinámicamente dentro de otro fragmento, entonces obtendrás problemas. Aunque es posible.

Generalmente implica publicar a un manejador que luego se ejecuta después de la transición de fragmento actual, a continuación, inicia otro, de esta manera se puede incrustar fragmentos muy fácilmente. Pero esto lleva a otras cuestiones, por lo que hay que tener cuidado de cómo implementar esto.

FoodTestFeast ha incorporado ViewPagers que se eliminan y se añaden dinámicamente.

Mi Base FragmentViewPager – Fragmento que contiene un paginador de vista (que tiene FragmentPagerAdapter)

No he visto ningún accidente usando esto todavía, pero hágamelo saber si alguien más lo hace.

 /** * @project FoodFeast * @author chris.jenkins * @created Dec 28, 2011 */ package couk.jenxsolution.food.ui.fragments; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.viewpagerindicator.TabPageIndicator; import couk.jenxsolution.food.R; import couk.jenxsolution.food.app.FoodApplication; /** * @author chris.jenkins */ public class QuizPagerBaseFragment extends QuizBaseFragment { // Data private FragmentStatePagerAdapter mAdapter = null; // Views private int layoutRes; private View mRootView; private ViewPager mPager; private TabPageIndicator mIndicator; // Handlers private final Handler handler = new Handler(); private Runnable runPager; private boolean mCreated = false; /** * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, * android.view.ViewGroup, android.os.Bundle) */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) mRootView = inflater.inflate(layoutRes, container, false); mPager = (ViewPager) mRootView.findViewById(R.id.pager); mPager.setOffscreenPageLimit(2); mIndicator = (TabPageIndicator) mRootView.findViewById(R.id.indicator); mIndicator.setTypeface(FoodApplication.getInstance().getTFs().getTypeFaceBold()); return mRootView; } /** * @see android.support.v4.app.Fragment#onActivityCreated(android.os.Bundle) */ @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (runPager != null) handler.post(runPager); mCreated = true; } /** * @see android.support.v4.app.Fragment#onPause() */ @Override public void onPause() { super.onPause(); handler.removeCallbacks(runPager); } /** * Set the ViewPager adapter from this or from a subclass. * * @author chris.jenkins * @param adapter */ protected void setAdapter(FragmentStatePagerAdapter adapter) { mAdapter = adapter; // mAdapter.notifyDataSetChanged(); runPager = new Runnable() { @Override public void run() { mPager.setAdapter(mAdapter); mIndicator.setViewPager(mPager); // mAdapter.notifyDataSetChanged(); mIndicator.setVisibility(View.VISIBLE); } }; if (mCreated) { handler.post(runPager); } } /** * Has to be set before onCreateView * * @author chris.jenkins * @param layoutRes */ protected void setLayoutRes(int layoutRes) { this.layoutRes = layoutRes; } } 

FYI su disposición tendrá que parecerse a esto (o similar): NOTA EL indicador = IDO!

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.viewpagerindicator.TabPageIndicator android:id="@+id/indicator" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone"/> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> 

Una manera inteligente de resolver la imposibilidad de usar fragmentos anidados es usar v4 y fragmentos nativos. Funciona (lo uso en muchas aplicaciones), y en algunos casos es lo que necesitamos para evitar este límite.

Obviamente, en la actividad puedes usar getFragmentManager () o getSupportFragmentManager () para distinguir los 2 grupos de fragmentos.

Probablemente es un uso obsoleto de él, pero me soluciona muchas situaciones.

  • Android - ¿Alguna vez tienes que agregar fragmentos al manifiesto
  • La mejor práctica para manejar el cambio de orientación: Android
  • Error al inflar fragmento en el cuadro de diálogo la segunda vez
  • Seleccione el primer elemento en ListView con Cursor Loader
  • Android cómo hacer animated setSelection () para listfragment?
  • Cómo deshabilitar / evitar Fragment animaciones personalizadas después de la rotación de la pantalla
  • Fragmentos herencia Android
  • IllegalStateException en FragmentManager
  • ¿Los fragmentos con setRetainInstance (true) sobreviven al cierre del proceso?
  • TabHost muestra contenido una vez (onCreate)
  • Comportamiento de fragmentos: FragmentTransaction :: replace () y operación backStack inversa
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.