studio - viewpager android slider
Botón en ViewPager para desplazarse a la página específica (2)
Uno de mis diseños dentro de mi ViewPager tiene un botón. "R.layout.add_site". Me gustaría tener la opción de pulsar el botón y desplazarme a la página específica para mí. Ya tengo la opción de pasar a la página específica, pero me gustaría tener ambas.
Ahora estoy seguro de que hay una manera de hacerlo, pero por alguna razón, no puedo entenderlo.
Verá que hice un intento, pero no sé qué método llamar para que se desplace a la página deseada. Que es R.layout.main.
Aquí está mi código.
public class fieldsActivity extends Activity {
Button addSiteButton;
Button cancelButton;
Button signInButton;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// to create a custom title bar for activity window
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.fields);
// use custom layout title bar
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.topbar);
Pager adapter = new Pager();
ViewPager mPager = (ViewPager) findViewById(R.id.fieldspager);
mPager.setAdapter(adapter);
mPager.setCurrentItem(1);
addSiteButton = (Button) findViewById(R.id.addSiteButton);
addSiteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Don''t know what method to call!?
}
});
cancelButton = (Button) findViewById(R.id.cancel_button);
signInButton = (Button) findViewById(R.id.sign_in_button);
}
private class Pager extends PagerAdapter {
public int getCount() {
return 3;
}
@Override
public Object instantiateItem(View collection, int position) {
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int resId = 0;
switch (position) {
case 0:
resId = R.layout.field01;
break;
case 1:
resId = R.layout.add_site;
break;
case 2:
resId = R.layout.main;
break;
}
View view = inflater.inflate(resId, null);
((ViewPager) collection).addView(view, 0);
return view;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
return null;
}
}
}
Cualquier ayuda es apreciada!
Realmente no puedo responder POR QUÉ sucede exactamente esto, pero si retrasas la llamada setCurrentItem durante unos milisegundos, debería funcionar. Supongo que porque durante onResume
no ha habido un pase de representación todavía, y el ViewPager necesita uno o algo así.
private ViewPager viewPager;
@Override
public void onResume() {
final int pos = 3;
viewPager.postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(pos);
}
}, 100);
}
Respuesta original: here
llamada :
mPager.setCurrentItem(2);
en su método onClick (), o para un desplazamiento más suave:
mPager.setCurrentItem(2, true);