Button in ViewPager scroll to specific page

28,638

Solution 1

call :

 mPager.setCurrentItem(2);

in your onClick() method, or for a smoother scroll:

mPager.setCurrentItem(2, true); 

Solution 2

I can't really answer WHY exactly this happens, but if you delay the setCurrentItem call for a few milliseconds it should work. My guess is that because during onResume there hasn't been a rendering pass yet, and the ViewPager needs one or something like that.

private ViewPager viewPager;

@Override
public void onResume() {
    final int pos = 3;
    viewPager.postDelayed(new Runnable() {

        @Override
        public void run() {
            viewPager.setCurrentItem(pos);
        }
    }, 100);
}

Original Answer: here

Share:
28,638
PhDeOliveira
Author by

PhDeOliveira

Updated on February 02, 2020

Comments

  • PhDeOliveira
    PhDeOliveira over 4 years

    One of my layouts inside of my ViewPager has a button. "R.layout.add_site". I would like the option of hitting the button and it scroll to the specific page for me. I already have the option to swipe to the specific page, but I would like to have both.

    Now I'm sure there's a way to do that, but for some reason, I cannot figure it out.

    You'll see that I've made an attempt , but just dont know what method to call in order to make it scroll to the desired page. Which is R.layout.main.

    Here's my 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;
        }
    
    
    }
    
    }
    

    Any help is appreciated!