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