sweggersen
sweggersen

Reputation: 2362

ViewPager + Fragments + Change page with button

I'm working with a ViewPager and change pages with a button. I've got it to work but it has inconsistent performance. Sometimes it just wont react. You can still scroll with touch but the button doesn't work. I have a ViewPager with a few fragments. This is the ViewPager code in FragmentActivity:

private void initializeViewPager() {
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

        ActionBar actionBar = getActionBar();

            @Override
            public void onPageSelected(int position) {
                currentPage = position;
            }

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {
                Log.d(TAG, "onPageScrollStateChanged: " + state);

            }

        });
}

This is the code in one of the Fragments:

// Referring to the ViewPager from FragmentActivity

static ViewPager mViewPager = MainActivity.mViewPager;

// Register onClick and setPagerItem

ImageView next = (ImageView)v.findViewById(R.id.ic_menu_next);
    next.requestFocus();
    next.setOnClickListener(new OnClickListener() {
     @Override
           public void onClick(View view) {
               mViewPager.setCurrentItem(getItem(+1), true);
           }

        });

// This figures out where in the ViewPager you are

private static int getItem(int i) {
    int a = mViewPager.getCurrentItem();
    i += a;
    return i;
}

Any suggestions?

Upvotes: 1

Views: 7203

Answers (1)

dymmeh
dymmeh

Reputation: 22306

Try using your currentPage field for the position. Calling getCurrentItem() on a ViewPager does not seem to work correctly for getting the position.

mViewPager.setCurrentItem(currentPage + 1, true);

Upvotes: 2

Related Questions