viewpager studio que pageradapter medium fragments example con android android-layout android-viewpager android-animation android-button

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