Tengo un FragmentPagerAdapter para un viewPager Que inicialmente tiene sólo un Fragmento de ella. Quiero agregar dinámicamente un nuevo Fragmento del adaptador cuando el usuario pasa de derecha a izquierda, y quitar de forma dinámica un Fragmento cuando el usuario pasa de izquierda a derecha.He tratado de usar esta biblioteca https://github.com/commonsguy/cwac-pager pero en la biblioteca tenemos una opción para agregar y quitar fragmentos de clics del botón. He intentado añadir un OnPageChangeListener para el viewpager, pero los métodos de devolución de llamada ( onPageScrolled y onPageScrollStateChanged) se llama más de una vez lo que resulta en la adición de más de un fragmento de la FragmentPagerAdapter. Así que por favor, arrojar algo de luz sobre cómo hacer esto.

OriginalEl autor dora | 2013-11-19

3 Comentarios

  1. 9

    @dora: yo creo que en tu caso FragmentStatePagerAdapter le ayudará. He mencionado su uso a continuación según mi comprensión.Espero que esto le ayudará en la toma de decisión.

    Hay dos formas de implementar ViewPager:
    • FragmentStatePagerAdapter
    • FragmentPagerAdapter

    FragmentStatePagerAdapter clase consume menos memoria, ya que destruye los fragmentos, tan pronto como ellos no son visibles para el usuario, manteniendo sólo se guarda el estado de ese fragmento

    FragmentPagerAdapter: cuando hay un menor número de fragmentos. Pero el uso de AndroidFragmentPagerAdapter para gran número de fragmentos, el resultado sería entrecortado y lag UX.

    Número de página presionado por un viewPager?
    El número de elementos que cualquier ViewPager se mantenga es fijado por el setOffscreenPageLimit() método. El valor predeterminado para el fuera de la pantalla de la página de límite es 3. Esto significa ViewPager hará un seguimiento de la página visible, uno a la izquierda y uno a la derecha. El número de seguimiento de las páginas está siempre centrada alrededor de la página visible.

    Por favor, siga este enlace para código: http://www.truiton.com/2013/05/android-fragmentpageradapter-example/

    OriginalEl autor Aditya

  2. 5

    Sé que este post es viejo, pero me costó mucho entender esto así que voy a responder de todos modos.

    Desea utilizar FragmentStatePagerAdapter y reemplazar getItemPosition(). Crear una lista de cosas que quiero pasar al fragmento, llamada notifyDataSetChanged(), y ya está todo listo!

    Aquí el adaptador:

    public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
    
            List<String> mKeyList = new ArrayList<>();
    
            public SectionsPagerAdapter(FragmentManager fm) {
                super(fm);
            }
    
            @Override
            public int getItemPosition(Object object) {
                return POSITION_NONE;
            }
    
            @Override
            public Fragment getItem(int position) {
                //getItem is called to instantiate the fragment for the given page.
                //Return a PlaceholderFragment (defined as a static inner class below).
                return PlaceholderFragment.newInstance(mKeyList.get(position));
            }
    
            @Override
            public int getCount() {
                return mKeyList.size();
            }
    
            @Override
            public CharSequence getPageTitle(int position) {
                return "SCOUT " + (getCount() - position);
            }
    
            public void add(int position, String key) {
                mKeyList.add(position, key);
                notifyDataSetChanged();
            }
        }

    Y aquí está el fragmento:

    public static class PlaceholderFragment extends Fragment {
    
            private static final String ARG_SCOUT_KEY = "scout_key";
    
            public static PlaceholderFragment newInstance(String key) {
    
                PlaceholderFragment fragment = new PlaceholderFragment();
                Bundle args = new Bundle();
                args.putString(ARG_SCOUT_KEY, key);
                fragment.setArguments(args);
                return fragment;
            }
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.current_scout_fragment, container, false);
    
                //getArguments().getString(ARG_SCOUT_KEY));
    
                return rootView;
            }
        }
    Ohh, Dios.. Gracias hombre, encontró esta solución después de 2 días. trabajo impresionante. Gracias mucho. Logra mediante la ampliación de FragmentStatePagerAdapter en lugar de FragmentPagerAdapter
    Agregar es fácil ahora, ¿dónde está el caso de quitar?
    es la repoblación de no lastimar a rendimiento?
    Lo hace y desde entonces me he movido. Yo ahora uso un clases personalizadas, que permite mover los elementos a su alrededor. Si usted llama notifyDataSetChanged(), sólo vamos a añadir o eliminar fragmentos como sea necesario. Esto significa que cada fragmento tiene que gestionar la actualización de sí mismo, aunque, como notificar a no actualizar los fragmentos. Si usas algo como base avanzada o Habitación, vas a estar bien.

    OriginalEl autor SUPERCILEX

  3. 2

    Quiero agregar dinámicamente un nuevo Fragmento del adaptador cuando el usuario pasa de derecha a izquierda, y eliminar de forma dinámica quitar un Fragmento cuando el usuario pasa de izquierda a derecha.

    AFAIK, que no será compatible con cualquier PagerAdadpter. Ciertamente no será apoyado por ArrayPagerAdapter. La página debe existir, de lo contrario te puede pasar a ti. Usted puede pasar en primer lugar, a continuación, agregar la página más tarde.

    Por otra parte, nunca he encontrado un caso de uso para la propuesta de su patrón que no podía ser manejado por tener la página estar en el adaptador, pero no rellenar la página (es decir, cualquiera que sea el costoso trabajo es que usted no parece estar tratando de evitar) hasta que el pase comienza.

    :estoy tratando de implementar un calendario para que cada vez que el usuario pasa de derecha a izquierda,se va de la semana próxima.pero también hay un botón en la parte superior de la vista de localizador que permite al usuario cambiar de meses.así que imaginen este escenario,supongamos que el usuario utiliza primero el mes conmutador de botón para ir al siguiente mes(en el interruptor de mes butonclick escribo viewpager.setCurrentItem(curentposition+1)) y, posteriormente, decide pasar el viewpager a ir a la semana anterior.el usuario no será capaz de regresar a la fecha en la que empezó, porque sólo hay una frament enla backstack.Mi Necesidad:él shud volver a donde empezó
    estoy tratando de implementar un calendario para que cada vez que el usuario pasa de derecha a izquierda,se va de la semana próxima» — ViewPager no es apropiado para ese papel, ya que hay un número infinito de semanas en el futuro, y un montón de semanas en el pasado.
    no necesito para navegar a pasado.todo lo que necesito para ser capaz de navegar es momento actual y en el futuro.así que por favor me ayude a salir si no hay manera de que
    De nuevo yo no los uso ViewPager, pero iba a rodar algo más el uso de gestos.

    OriginalEl autor CommonsWare

Dejar respuesta

Please enter your comment!
Please enter your name here