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

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; } } 

He creado una aplicación de prueba simple con usted PagerAdapter y Fragment simple s con un Button :

Introduzca aquí la descripción de la imagen

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!

  • Repoblando valores en Android Fragment onResume
  • Buscar Fragmento por nombre de etiqueta en Contenedor
  • Honeycomb Gmail Como Aplicación
  • Android - No se puede usar popup en Fragmento
  • Cómo migrar de la actividad a fragmento
  • Google google maps con marcador dentro del fragmento
  • FragmentManager agrega varias instancias del mismo tipo de fragmento
  • Los valores de EditText en Android Fragment no se actualizan
  • Cargar imagen desde la cámara a ImageView en un fragmento
  • Cómo abrir el cajón de navegación en el botón de clic en el fragmento principal?
  • Cargar un fragmento al hacer clic en CardView desde RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.