Android: ¿Puedes anidar Fragmentos?

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

4 Solutions collect form web for “Android: ¿Puedes anidar Fragmentos?”

¡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.

  • El cuadro de diálogo de fragmentos de Android parece ignorar layoutMargin o layoutWidth cuando se usa weightSum
  • Android consigue la altura y el ancho de la distribución en un fragmento
  • ListFragment Layout desde xml
  • Android - ¿Alguna vez tienes que agregar fragmentos al manifiesto
  • ¿Los elementos de preferencia se reajustan automáticamente?
  • ¿Cómo puedo saber si 2 fragmentos tienen una instancia de la misma clase
  • Establecer el adaptador de vista de lista en un fragmento en android
  • Fragmentos herencia Android
  • Refreshing ArrayAdapter onResume
  • Android - Cómo cambiar fragmentos en el cajón de navegación
  • Cómo mostrar un ListFragment existente en un DialogFragment
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.