Android: Puede anidar Fragmentos?

Es posible meter un Fragment en el diseño de otro Fragment? Alguien ha probado esto?

  • has probado? Lo que pasó?
  • Yo no lo he probado. Espero que alguien más tiene.
  • Estoy con Mitch. Tal vez me estoy haciendo viejo, pero en mi día a día de la gente trató de cosas para ver qué pasaba. Si tienes una idea, a continuación, ejecute con el 100% de oro sólido del aprendizaje por experiencia.
  • Creo que voy a ser el conejillo de indias. Voy a dejar que usted sabe el resultado.
  • También estoy tratando de usar un FragmentPager en el interior de un Fragmento.
  • En realidad es posible en la api de+17.
  • eso es una manera, pero si el resultado es negativo, ¿cómo podría una persona distinguir si era porque no era posible, o si lo hizo mal
  • Si se intentó y no funcionó, a continuación, al menos tendrían código que podría publicar aquí. Es el principal punto de Desbordamiento de Pila – trate de algo en primer lugar, a continuación, pedir ayuda si se produce un error.
  • De acuerdo….
  • Posibles duplicados de Fragmento Dentro Fragmento
  • He probado aquí

4 Kommentare

  1. 46

    ¡Por fin! android 4.2 actualización viene con defecto de apoyo para anidada fragmentos, también compatible con:
    Oficial NestedFragments. Lo que es más, el apoyo de la anidados Fragmentos anunció en las últimas 11 de revisión de la v4 apoyo de la biblioteca!

    • Este es oficialmente ahora la respuesta correcta. Gracias por compartir, yo no era consciente de esta actualización.
    • Mientras que en el fragmento simplemente llame getChildFragmentManager() en lugar de getFragmentManager. Solucionado un problema que estaba teniendo de inmediato con anidada fragmentos utilizando una versión anterior de la compatibilidad de la biblioteca
  2. 7

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

    • Qué tipo de problemas? Acabo correctamente anidados Fragmentos.
    • los problemas relacionados con cómo las opiniones aparecen en la pantalla? o relacionados con el ciclo de vida de los fragmentos?
    • He asignado a esta como la respuesta, porque parece que esto no es aconsejable. Yo lo hice, de hecho, tienen problemas al hacer esto, incluso a pesar de que es «posible» para hacerlo.
    • Yo no asignar esta como la respuesta, como técnicamente incorrecto, como usted puede. Solo porque no recomendado no significa que usted no puede. Lo tengo funcionando de forma fiable.
    • No vamos a prometer que la aplicación seguirá funcionando correctamente en el futuro.
    • así que si queremos que el fragmento efecto en nuestro código entonces, ¿qué debemos hacer, excepto compatible con el uso de este paquete de apoyo ?
    • Puedes dar algún detalle para nosotros sobre fragmentos no estar en una jerarquía, y por qué la anidación de los fragmentos pueden causar problemas?

  3. 5

    Edición: Como de ACLv11 esto sólo es necesario si usted replace(...) ViewPagers de forma dinámica.

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

    Si incrusta en XML, a continuación, cuando el diseño se infla usted no tendrá ningún problema.

    Si se incorpora fragmentos de forma dinámica dentro de otro fragmento de entonces, tendrás problemas! Aunque es posible.

    General, consiste en la publicación de un controlador que se ejecuta después de que el actual fragmento de transición, a continuación, se inicia otro, de esta manera se puede integrar fragmentos con bastante facilidad. Pero esto conduce a otros problemas, por lo que usted tiene que tener cuidado de cómo implementar esto.

    FoodTestFeast ha incorporado ViewPagers que se retiran y se añade dinámicamente.

    Mi Base FragmentViewPager – Fragmento que tiene una vista de buscapersonas (Que ha FragmentPagerAdapter)

    No he visto ningún tipo de accidentes el uso de este, sin embargo, pero quiero 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 diseño tendrá que mirar como esta (o similar):
    NOTA EL Indicador de = 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>
    • ¿Puede dar un ejemplo de código?
    • Seguro que voy a cavar una para usted de mi proyecto. Voy a actualizar la respuesta.
    • tengo un fragmento en FragmentPageviewer.Fragmento contiene 4 valores.yo quiero cuando me clic en el valor que va a añadir o sustituir a otro fragement.es esto posible?
    • abrir otra pregunta con un poco más de exp y voy a tratar de responder a eso 🙂
    • gracias por el apoyo . finalmente encontrar la solución..que tengo que tomar otra Viewpager y crear su visibilidad visible ,invisible .
    • ¿has visto algo como eso (viewpager fragmento dentro fragmento), el cual funciona con base de datos del cursor ? Esperaba encontrar un digno ejemplo para ViewPager con la base de datos del cursor y no podía, y no encontrar una gran cantidad de información sobre el fragmento dentro de otro fragmento – de modo que la combinación de ambos parece una tarea difícil…
    • mi Moupp app utiliza Cargadores y ViewPager dentro de un Fragmento. Funciona bien. Hacer una pregunta y tweet mí el enlace y voy a responder a ella. También tengo una idea aquí: gist.github.com/3405429 de la Base de ViewPager fragmento
    • Como de ACL 11 este Hack no es necesaria ninguna más.

  4. 0

    Una forma inteligente de resolver la imposibilidad de utilizar anidada fragmentos es el uso de ambos v4 y nativo de fragmentos.
    Funciona (yo lo uso en muchas aplicaciones), y en algunos casos es lo que necesitamos para eludir este límite.

    Obviamente, en la actividad que usted puede utilizar getFragmentManager() o getSupportFragmentManager() para distinguir los 2 grupos de fragmentos.

    Probablemente está en desuso uso de ella, pero no me soluciona muchas situaciones.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea