viewpager support studio con java android android-viewpager onclicklistener android-pageradapter

java - support - android tabs



setOnPageChangeListener no llama a PageSelected (5)

¿Intentó utilizar ViewPager.setOnPageChangeListener en lugar de su 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) { } });

Configuré un simpleonpagechangelistener usando el siguiente ejemplo:

Android SimpleOnPageChangeListener: determina la dirección del deslizamiento

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

public void onPageSelected(int position) {

Sin embargo, parece que nunca lo hace, lo que está causando una 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" />


Utilizar

viewPager.setOnPageChangeListener(mPageChangeListener);

retirar

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

y

setOnPageChangeListener(mPageChangeListener);


Tuve el mismo problema ahora: también establecí una variable como un 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 cual su código no funciona es porque está creando su variable local dentro de su método onCreate. Dos formas en que puedes arreglar esto:

  1. Puedes asignar tu código para el onPageChangeListener dentro de tu setter así que:

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

  1. puede crear una variable miembro para su ''mPageChangeListener'' para que se inicialice antes de llamar a onCreate. Copie su código mPageChangeListener encima de su método onCreate e inicie allí.

Estaba usando ViewPagerIndicator y resulta que cuando lo haces, debes establecer OnPageChangeListener en el indicador en lugar de hacerlo en el viewpager. (según lo documentado )

Entonces hazlo

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 aplica si está usando SlidingTabLayout


viewPager.setOnPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int currentPage) { // work here after changing page } });