Yuro8
Yuro8

Reputation: 41

The ViewPager is executing a wrong fragment

I have a problem with my ViewPager. I'm using custom ImageButtons to swipe between fragments. The problem is, when I try to swipe from third fragment to fourth (case 3) fragment, the fifth(case 4) fragment is executed(without fragment UI) and then is showed fourth fragment. Thanks

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0: return ScreenSlidePageJobTitle.newInstance();
                case 1: return ScreenSlidePageJobDescription.newInstance();
                case 2: return ScreenSlidePageJobLocation.newInstance();
                case 3: return ScreenSlidePageJobPrice.newInstance();
                case 4: return ScreenSlidePageJobToDb.newInstance();
                default: return ScreenSlidePageJobToDb.newInstance();
            }
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }
    }

    public void setSlide(int slide, boolean scroll) {
        mViewPager.setCurrentItem(slide, scroll);
    }

    public int getItem() {
        return mViewPager.getCurrentItem();
    }
}

I'm using this functionality to swipe

nextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(checkLocation())
                {
                    int slide = ((AddItemFragment)(getParentFragment())).getItem() + 1;
                    ((AddItemFragment)(getParentFragment())).setSlide(slide, true);
                }
            }
        });

// edit mViewPager is declared as global variable and define in onCreateView

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_add_item, container, false);

        mViewPager = rootView.findViewById(R.id.add_item_view_pager);
        mViewPager.setAdapter(new ScreenSlidePagerAdapter(getChildFragmentManager()));

        SharedPreferences sharedPreferences = getContext().getSharedPreferences(JOB_PREFERENCES, Context.MODE_PRIVATE);


        return rootView;
    }

Upvotes: 0

Views: 427

Answers (2)

Masoud Mokhtari
Masoud Mokhtari

Reputation: 2474

Just try this code:

viewpager.setOffscreenPageLimit(4);

This code solve your problem.

Upvotes: 0

Alexander Deych
Alexander Deych

Reputation: 446

By default ViewPager retains 1 fragment on either side of the current fragment. Check https://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

Upvotes: 1

Related Questions