Circular ViewPager. Fragmentos no funcionan como se suponía después de la primera ronda
Ok, así que necesitaba ViewPager circular. Me estaba costando trabajo implementarlo. Ahora que lo he implementado y está funcionando bien en cuanto a desplazamiento circular es la preocupación. Pero he notado un problema.Que es, después de la primera ronda de fragmentos de desplazamiento no funcionan. Tengo tres fragmentos con un botón dentro de ellos. Botón funciona en la primera ronda, pero cuando vuelvo al botón de primera página no funciona. Ps i utilizó la técnica de páginas falsas para hacer circular viewpager.
Aquí está el código
- Mi fragmento no se puede transmitir a android.support.v4.app.Fragment
- getChildFragmentManager () no se puede resolver o no se puede hacer referencia
- Reemplazar ListFragment con fragmento dentro de ViewPager con pestañas
- fragmento de llamada dentro de la clase AppWidgetProvider
- Ciclo de vida del fragmento con respecto a su actividad
mViewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), this)); //mViewPager.setOnPageChangeListener(new CircularViewPagerHandler(mViewPager)); mViewPager.setCurrentItem(1, false); mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if (position == 0) { mViewPager.setCurrentItem(3, false); Log.d("TAG", "Swiped before first page, looping and resetting to last page."); } else if (position == 4) { mViewPager.setCurrentItem(1, false); Log.d("TAG", "Swiped beyond last page, looping and resetting to first page."); } } @Override public void onPageScrollStateChanged(int state) { Log.d("onPageScrollState", "state:" + state); int currentPage = mViewPager.getCurrentItem(); if(currentPage==1){ imgCenter.setImageResource(R.drawable.take_ride); imgLeft.setImageResource(R.drawable.give_ride); imgRight.setImageResource(R.drawable.setting); } if(currentPage==2){ imgCenter.setImageResource(R.drawable.setting); imgRight.setImageResource(R.drawable.take_ride); imgLeft.setImageResource(R.drawable.give_ride); } if (currentPage==3){ imgCenter.setImageResource(R.drawable.give_ride); imgLeft.setImageResource(R.drawable.take_ride); imgRight.setImageResource(R.drawable.setting); } } });
Aquí está la clase PagerAdapter
public class PagerAdapter extends FragmentPagerAdapter { Context mcontext; public PagerAdapter(FragmentManager fm, Context context) { super(fm); mcontext = context; } @Override public Fragment getItem(int position) { if (position == 0) { return new HomeFragment2(); } else if(position==1){ return new HomeFragment(); } else if (position == 2) { return new SettingFragment(); } else if(position==3){ return new HomeFragment2(); } else return new HomeFragment(); } @Override public int getCount() { return 5; } }
- Fragmentos múltiples con diferentes listas de expansión para los mismos datos
- ListView dentro de un fragmento utilizado en un ViewPager no se comporta como se esperaba
- Añadir pestaña dentro de Fragmento ¿En Android?
- Abre la actividad A y carga un fragmento específico de la actividad A de la actividad B
- Android - FragmentTabHost me da "No se conoce ninguna pestaña para la etiqueta null"
- Barra de Acción Sherlock SearchView no se expande al hacer clic
- Comprobar fragmento está visible o no en android?
- ¿Por qué se utiliza FrameLayout para fragmentos?
He creado una aplicación de prueba simple con usted PagerAdapter
y Fragment
simple s con un Button
:
Y funciona bien!
He subido el código fuente aquí , así que puedes comprobarlo y ver si hay alguna diferencia con el tuyo.
Como un Fragment
que usé:
public class FragmentA extends android.support.v4.app.Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_a, container, false); rootView.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Snackbar.make(v, "Hi, fragment A", Snackbar.LENGTH_SHORT).show(); } }); return rootView; } }
Así que lo que puedo recomendar
-
Reemplace sus fragmentos con algunos ficticios (como el de arriba). Si funciona – el problema está en el código de
Fragment
, no en el ViewPager circular -
Si todavía no funciona – intentaría en vez de volver a crear fragmentos varias veces – crearlos una vez y almacenar:
public class PagerAdapter extends FragmentPagerAdapter { Context mcontext; Fragment [] fragments; public PagerAdapter(FragmentManager fm, Context context, Fragment [] fragments) { super(fm); mcontext = context; this.fragments = fragments; } @Override public Fragment getItem(int position) { return fragments[position]; } @Override public int getCount() { return fragments.length; } }
Y en
Activity
:Fragment[] fragments = { Fragment.instantiate(this, FragmentC.class.getName()), Fragment.instantiate(this, FragmentA.class.getName()), Fragment.instantiate(this, FragmentB.class.getName()), Fragment.instantiate(this, FragmentC.class.getName()), Fragment.instantiate(this, FragmentA.class.getName()), }; ..... viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), this, fragments));
Déjeme saber, si ayuda!