-2

I need to switch next tab, when a button is clicked from a child fragment.

This is how I setup tabs in parent,

TabAdapter adapter;

private void setUpTabs(ViewPager viewPager) {

    adapter = new TabAdapter(getSupportFragmentManager());
    adapter.addFragment(new FirstTabFragment(), "First Tab");
    adapter.addFragment(new SecondTabFragment(), "Second Tab");
    viewPager.setAdapter(adapter);

}

And my TabAdapter class is,

public class TabAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public TabAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

I created a method to switch tab inside Parent

TabLayout myTabs= (TabLayout) findViewById(R.id.my_tabs);

Button chkBtn = (Button) findViewById(R.id.check_button);

chkBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        viewPager.setCurrentItem(1);
    }
});

Switching tabs inside parent class works fine. But how could I Do the same inside FirstTabFragment, Please help me.

AskNilesh
  • 67,701
  • 16
  • 123
  • 163
Kavin-K
  • 1,948
  • 3
  • 17
  • 48

3 Answers3

2

you should use setCurrentItem(int item)

Set the currently selected page. `

sample code

chkBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        viewPager.setCurrentItem(2);
    }
});
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
2

You should call

viewPager.setCurrentItem(fragmentIdex);

IntelliJ Amiya
  • 74,896
  • 15
  • 165
  • 198
0

Just to make your UI more Interactive and good looking, I'm gonna share what I've implemented.

Just to access your viewPager from the fragment's java file, declare your viewPager as below in your parent activity.

public static ViewPager viewPager;

Then in the onClick method or onClickListener of a button in the fragment, you can just use this.

ParentActivity.viewPager.arrowScroll(View.FOCUS_RIGHT);

This will smooth scroll your viewpager to the Second Fragment, and yes, if you want to limit the user from scrolling directly you can disable the scrolling of viewPager, read here.

You can also shift the focus to left if user wants to go back to FirstFragment by just

ParentActivity.viewPager.arrowScroll(View.FOCUS_LEFT);

And yes, it's working as I first test before posting answers, silly me.

Lalit Fauzdar
  • 5,953
  • 2
  • 26
  • 50