Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


SetOnPageChangeListener no llama aPageSelected

He configurado un simpleonpagechangelistener con el siguiente ejemplo:

Android SimpleOnPageChangeListener – Determina la dirección de desplazamiento

Sin embargo, cuando ejecuto el código y luego deslizar el viewpager espero que se llame la siguiente línea:

public void onPageSelected(int position) { 

Sin embargo nunca parece hacerlo – que está causando un viewPager no funcional.

¿Alguna sugerencia?

  public class Home extends YouTubeBaseActivity implements VideoClickListener { ... private int mCurrentTabPosition = NO_CURRENT_POSITION; private static final int NO_CURRENT_POSITION = -1; private ViewPager mPager; ... int imageArray[]; String[] stringArray; private OnPageChangeListener mPageChangeListener; ImagePagerAdapter adapter = new ImagePagerAdapter(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); final ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); viewPager.setAdapter(adapter); ... setOnPageChangeListener(mPageChangeListener); mPageChangeListener = new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { onTabChanged(mPager.getAdapter(), mCurrentTabPosition, position); position = mCurrentTabPosition; int oldPos = viewPager.getCurrentItem(); if (position > oldPos) { System.out.print(position); // Moving to the right String playlist = "TheMozARTGROUP‎"; new GetYouTubeUserVideosTask(responseHandler, playlist) .execute(); View vg = findViewById(R.layout.home); vg.invalidate(); } else if (position < oldPos) { // Moving to the Left System.out.print(position); String playlist = "TheMozARTGROUP‎"; new GetYouTubeUserVideosTask(responseHandler, playlist) .execute(); View vg = findViewById(R.layout.home); vg.invalidate(); } viewPager.setOnPageChangeListener(mPageChangeListener); } private void onTabChanged(PagerAdapter adapter, int mCurrentTabPosition, int position) { // TODO Auto-generated method stub } }; } private void setOnPageChangeListener( OnPageChangeListener mPageChangeListener2) { // TODO Auto-generated method stub } ... private class ImagePagerAdapter extends PagerAdapter { public ImagePagerAdapter(Activity act, int[] mImages, String[] stringArra) { imageArray = mImages; activity = act; stringArray = stringArra; } public ImagePagerAdapter() { super(); } private int[] mImages = new int[] { R.drawable.selstation_up_btn, R.drawable.classical_up_btn, R.drawable.country_up_btn, R.drawable.dance_up_btn, R.drawable.hiphop_up_btn, R.drawable.island_up_btn, R.drawable.latin_up_btn, R.drawable.pop_up_btn, R.drawable.samba_up_btn }; private String[] stringArray = new String[] { "vevo", "TheMozARTGROUP‎", "TimMcGrawVEVO‎", "TiestoVEVO‎", "EminemVEVO‎" }; @Override public int getCount() { return mImages.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == ((ImageView) object); } @Override public Object instantiateItem(ViewGroup container, int position) { Context context = Home.this; ImageView imageView = new ImageView(context); imageView.setScaleType(ScaleType.FIT_XY); imageView.setImageResource(mImages[position]); ((ViewPager) container).addView(imageView, 0); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView((ImageView) object); } protected void onTabChanged(final PagerAdapter adapter, final int oldPosition, final int newPosition) { // Calc if swipe was left to right, or right to left if (oldPosition > newPosition) { // left to right } else { // right to left } final ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); } } } 

XML:

  <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="wrap_content" android:layout_height="fill_parent" /> 

5 Solutions collect form web for “SetOnPageChangeListener no llama aPageSelected”

Utilizar

  viewPager.setOnPageChangeListener(mPageChangeListener); 

retirar

  private void setOnPageChangeListener( OnPageChangeListener mPageChangeListener2) { // TODO Auto-generated method stub } 

y

  setOnPageChangeListener(mPageChangeListener); 

Yo estaba usando ViewPagerIndicator y resulta que cuando lo hace, debe establecer el OnPageChangeListener en el indicador en lugar de en el viewpager. (Según lo documentado )

Hacer

  mIndicator.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { doYourThing(); } }); 

en lugar de:

  mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { doYourThing(); } }); 

Lo mismo se aplica si utilizas SlidingTabLayout

¿Has intentado usar un ViewPager.setOnPageChangeListener en lugar de tu SimpleChangeListener? solo inténtalo:

 mPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int pos) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int pos) { } }); 

Tuve el mismo problema ahora – también establecí una variable como igual a:

  mPageChangeListener = new ViewPager.OnPageChangeListener() {<methods>} 

Y luego se lo asignó a mi viewpager después por:

  mPager.setOnPageChangeListener(mPageChangeListener) 

La razón por la que su código no funciona es porque está creando su variable local dentro de su método onCreate. Dos maneras de arreglar esto:

  1. Puede asignar su código para el onPageChangeListener dentro de su setter así:

mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {<methods>})

  1. Puede crear una variable miembro para su 'mPageChangeListener' para que se inicialice antes de que onCreate se llame. Por lo tanto, copie su código mPageChangeListener por encima de su método onCreate e inicialice allí.
  viewPager.setOnPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int currentPage) { // work here after changing page } }); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.