viewpager studio example and android button navigation android-viewpager

studio - tabs android material design



Botón anterior/siguiente de Android ViewPager (7)

1) Hacer diseño

<RelativeLayout android:layout_width="match_parent" android:layout_height="200dp" android:background="@color/white" android:weightSum="1"> <android.support.v4.view.ViewPager android:id="@+id/images_pager" android:layout_width="match_parent" android:layout_height="match_parent" > </android.support.v4.view.ViewPager> <ImageView android:id="@+id/img_next" android:layout_width="35dp" android:layout_height="35dp" android:src="@drawable/forward_white" android:background="@color/colorPrimary" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:paddingTop="5dp" android:paddingBottom="5dp" /> <ImageView android:id="@+id/img_previous" android:layout_width="35dp" android:layout_height="35dp" android:src="@drawable/back_white" android:background="@color/colorPrimary" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:layout_alignParentLeft="true" android:paddingTop="5dp" android:paddingBottom="5dp"/> </RelativeLayout>

2) Establecer adaptador personalizado

CustomViewPagerAdapter custompageradpter; ViewPager mViewPager; mViewPager = (ViewPager)shareImagesDialouge.findViewById(R.id.images_pager); custompageradpter = new CustomViewPagerAdapter(this); mViewPager.setAdapter(custompageradpter); public class CustomViewPagerAdapter extends PagerAdapter { Context mContext; LayoutInflater mLayoutInflater; int[] mResources = { R.drawable.emoji_1, R.drawable.emoji_2, R.drawable.emoji_3, R.drawable.emoji_4, R.drawable.emoji_5, R.drawable.emoji_6 }; public CustomViewPagerAdapter(Context context) { mContext = context; mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return mResources.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == ((LinearLayout) object); } @Override public Object instantiateItem(ViewGroup container, int position) { View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false); ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView); imageView.setImageResource(mResources[position]); container.addView(itemView); return itemView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((LinearLayout) object); } }

3) Para el botón siguiente y anterior

case R.id.img_previous: mViewPager.setCurrentItem(getItemofviewpager(-1), true); break; case R.id.img_next: mViewPager.setCurrentItem(getItemofviewpager(+1), true); break;

4) Hacer esta función

private int getItemofviewpager(int i) { return mViewPager.getCurrentItem() + i; }

De acuerdo, entonces estoy desarrollando una aplicación de Android que utiliza un ViewPager para mostrar páginas.

Dentro de cada página, tengo un conjunto de botones para navegar entre las páginas (además de deslizar entre las páginas). Estos botones son para "primera página", "página anterior", "página siguiente" y "última página".

Lo que no sé cómo hacer es diseñar un mecanismo para habilitar un cambio de página al hacer clic en un botón.

¿Alguien tiene alguna idea?

ETA: para explicar mejor la configuración, los botones se declaran dentro del diseño de cada página y se inflan con el resto del diseño dentro del Adaptador de paginación. Mi problema es que no puedo hacer referencia a ViewPager desde el PagerAdapter. O al menos, no puedo pensar en una forma de hacerlo.


Botón:

Button yourButton = (Button)findViewById(R.id.button1); yourButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { mViewPager.setCurrentItem(getItem(+1), true); //getItem(-1) for previous } });

Función:

private int getItem(int i) { return mViewPager.getCurrentItem() + i; }

Espero que esto ayude :)


Terminé este proyecto con este código.

vPager = (ViewPager) findViewById(R.id.viewpager); View tempView1 = inflater.inflate(R.layout.ani_dialog1, null); firstView = (ImageView) tempView1.findViewById(R.id.ani_dialog_next); views.add(tempView1); firstView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub vPager.setCurrentItem(1, true); } });


Una actualización a sweggersen''s a la sweggersen''s y Alex Orlov ,

// For scrolling to next item nextPageButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { viewPager.setCurrentItem(getNextPossibleItemIndex(1), true); } }); // For scrolling to previous item previousPageButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { viewPager.setCurrentItem(getNextPossibleItemIndex(-1), true); } });

Agrega el método getNextPossibleItemIndex () en tu Activity / Fragment,

private int getNextPossibleItemIndex (int change) { int currentIndex = viewPager.getCurrentItem(); int total = viewPager.getAdapter().getCount(); if (currIndex + change < 0) { return 0; } return Math.abs((currentIndex + change) % total) ; }

De esta manera, podrá cambiar el elemento actual sin preocuparse por IndexOutOfBoundsException como lo sugiere el comentario de Heinrich . Tenga en cuenta que al usar este método, los elementos se mostrarán como una lista circular.

1 -> 2 -> 3 -> 1 -> 2 -> 3 -> 1

Pero volviendo, se detendrá en el primer artículo

1 <- 1 <- 2 <- 3


Código de actualización

Button preButton = (Button)findViewById(R.id.pre_button); Button nextButton = (Button)findViewById(R.id.next_button); preButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mViewPager.setCurrentItem(mViewPager.getCurrentItem()-1, true); } }); nextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1, true); } });


public void onClick(View v) { int currentItem = mViewPager.getCurrentItem(); mViewPager.setCurrentItem(currentItem+1); //(currentItem-1) }

solo este código en el botón clic: @Override

getcurrentitem es el elemento real en viewpager , el siguiente elemento es currentItem + 1


yourButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { yourViewPager.setCurrentItem(page, smoothScroll); } });