0

Here I've nested TabLayouts inside a Fragment which is working so fine for me but not I just want to know how I can switch Tabs of TabLayouts when MainTabFragment is not in front of app. I searched for a long time and I found it's possible with findFragmentByTag but I don't know how I should use it in my case where I have to switch Tabs too. For more I'm writing my code too.

In MainActivity I'm switching Tabs when MainTabFragment is in front and calling that Fragment when it's not in front like:

 Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.frame_container);
            if (currentFragment instanceof MainTabFragment) {  
           //Main Fragment
                MainTabFragment.pager.setCurrentItem(1);
          // Child Fragment of Main Fragment
                TopAdvisoryPagerFragment.pager.setCurrentItem(2);
            } else {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        fragment = new MainTabFragment();
                        changeFragments();                           
                    }
                }, 150);
            }
            mDrawerLayout.closeDrawer(mDrawerList);

  public void changeFragments() {

    if (fragment != null) {
        mPendingRunnable = new Runnable() {
            @Override
            public void run() {
                FragmentManager fragmentManager = getSupportFragmentManager();
                final Bundle bundle = new Bundle();
                bundle.putInt("pos_next", second_position);
                bundle.putInt("pos_end", third_position);
                fragment.setArguments(bundle);
                fragmentManager.beginTransaction().replace(R.id.frame_container, fragment, "TOP").addToBackStack(null).commit();
            }
        };        
        if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
            mDrawerLayout.closeDrawer(mDrawerList);
        }

    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}
Anshul Tyagi
  • 2,076
  • 4
  • 34
  • 65

1 Answers1

0

If I'm not wrong,

fragmentManager.beginTransaction().replace(com.cws.advisorymandi.R.id.frame_container, fragment, "TOP");

Tag refer to "TOP", if you have different fragment using the same tag, it would be difficult to switch. You could possibly change the code to

fragmentManager.beginTransaction().replace(com.cws.advisorymandi.R.id.frame_container, fragment, fragment.getClass().getSimpleName());

In this scenario, the tag will be your fragment class name.

Ophitect
  • 543
  • 4
  • 18