Android: ¿Puedes anidar Fragmentos?
¿Es posible pegar un Fragment
en el diseño de otro Fragment
? ¿Alguien ha intentado esto?
- Cambio de orientación Crash Application
- Fundamentos de Android Fragments: ¿por qué? ¿Es esto conceptualmente erróneo?
- La mejor manera de evitar pérdidas de memoria en el fragmento android
- Acceso a la vista de fragmentos de la actividad onCreate
- Fragmentos y problemas con la pantalla giratoria
- Android: Cambiar el color de fondo del fragmento
- Cómo mostrar un ListFragment existente en un DialogFragment
- ¿Cómo funciona `onViewStateRestored` de Fragments?
- El fragmento de niño está destruyendo automáticamente
- Cómo comunicarse entre dos Fragmentos de niño dentro de un Fragmento anidado
- Android: ¿cómo puedo acceder a las vistas (utilizando findViewById) de una actividad de un fragmento onCreateView ()?
- Android consigue la altura y el ancho de la distribución en un fragmento
- ListFragment Layout desde xml
¡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.
- Cómo detectar si un ListView se desplaza rápidamente
- Cómo hacer que el contenido de la ventana de información del marcador haga clic en android