0

I have three Fragments attached to ViewPager. If i am Fragment1, and i have a button on Fragment1, i want on button click of that 'Fragment', access the Fragment3 but on the same time if i slide the page,i don't want to access the Fragment3. while sliding i want to access only up to Fragment2. How can i do this.

TabPagerAdapter.java:-

public class TabPagerAdapter extends FragmentStatePagerAdapter { public TabPagerAdapter(FragmentManager fragmentManager) { super(fragmentManager); }

    @Override
    public Fragment getItem(int position) 
    {
        switch (position) 
        {
        case 0:

            return new Fragment1();
        case 1:

            return new Fragment2();
        case 2:

            return new Fragment3();

        }
        return null;
    }
    @Override
    public int getCount()
    {
        return 3; 
    }
Hemina
  • 375
  • 1
  • 11
Manish Kumar
  • 71
  • 1
  • 6

2 Answers2

0

I have implemented something very similar: Previously I had four fragments in my ViewPager, but then decided that I want to integrate two of those fragments more intimately by reducing the number of fragment that I can reach by sliding and switching back and forth between two fragments by using a button. The implementation took me a while, though. I did not manage to mess with the index of my fragmentList properly. In the end, the trick was to take out those two fragments from the ViewPager altogether and add a HolderFragment instead. Within this fragment I implemented the fragment transaction for hiding one and showing the other fragment.

Here is the code from my HolderFragment:

public class HolderFragment extends Fragment {
    private Context context;     
    private Fragment currentFragment;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.fragment_holder, container, false);

        OneFragment oneFragment =
            (OneFragment) Fragment.instantiate(context, OneFragment.class.getName());
        OtherFragment otherFragment =
            (OtherFragment) Fragment.instantiate(context, OtherFragment.class.getName());

        // oneFragment selected on view creation
        FragmentManager fm = this.getChildFragmentManager();
        fm.beginTransaction().add(R.id.holder_fragment_holder, oneFragment).commit();
        fm.beginTransaction().add(R.id.holder_fragment_holder, otherFragment).hide(mediaFragment)
            .commit();
        currentFragment = oneFragment;

        return view;
    }

    public void switchFragments(Fragment fragment) {
        if (!fragment.equals(currentFragment)) {
            this.getChildFragmentManager().beginTransaction().hide(currentFragment).commit();
            currentFragment = fragment;
            this.getChildFragmentManager().beginTransaction().show(currentFragment).commit();
        }
    }
}

Then, whenever the switch button is pressed just call holderFragment.switchFragments(oneFragment) or holderFragment.switchFragments(otherFragment) from the activity that holds the ViewPager (and a reference to the HolderFragment).

kalabalik
  • 3,792
  • 2
  • 21
  • 50
-1

Try this

mViewPager.setCurrentItem(your_position, true);
Anton Kazakov
  • 2,740
  • 3
  • 23
  • 34