web-dev-qa-db-fra.com

Bouton dans ViewPager faire défiler jusqu'à une page spécifique

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!

18
PhDeOliveira

appel :

 mPager.setCurrentItem(2);

dans votre méthode onClick (), ou pour un défilement plus fluide:

mPager.setCurrentItem(2, true); 
51
Ercan

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

0
Naveen Kumar M