L'une de mes mises en page à l'intérieur de ViewPager a un bouton. "R.layout.add_site". Je voudrais l'option de frapper le bouton et faites défiler jusqu'à la page spécifique pour moi. J'ai déjà l'option de glisser vers la page spécifique, mais j'aimerais avoir les deux.
Maintenant, je suis sûr qu'il existe un moyen de le faire, mais pour une raison quelconque, je ne peux pas le comprendre.
Vous verrez que j'ai essayé, mais vous ne savez pas quelle méthode appeler pour le faire défiler jusqu'à la page souhaitée. Qui est R.layout.main.
Voici mon code.
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;
}
}
}
Toute aide est appréciée!
appel :
mPager.setCurrentItem(2);
dans votre méthode onClick (), ou pour un défilement plus fluide:
mPager.setCurrentItem(2, true);
Je ne peux pas vraiment dire POURQUOI cela se produit exactement, mais si vous retardez l'appel setCurrentItem de quelques millisecondes, il devrait fonctionner. J'imagine que, parce que pendant onResume
, il n'y a pas encore eu de passe de rendu et que ViewPager en a besoin.
private ViewPager viewPager;
@Override
public void onResume() {
final int pos = 3;
viewPager.postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(pos);
}
}, 100);
}
Réponse originale: ici