3

I am writing an app which has a Navigation Drawer and is using nested fragments. The navigation drawer is created pretty much as per Android docs - it works. I want the navigation drawer to be visible always, that's why I have one activity with it, and I just swap fragments. One of the fragments is a ViewPager, which in turn has its own fragments as pages.

The navigation is hierarchical like this:

- Home
- Fragment 1
-- Subfragment 1.1
-- Subfragment 1.2
-- Subfragment 1.3
- Fragment 2
-- Subfragment 2.1
-- Subfragment 2.2
-- Subfragment 2.3

where Fragment is a ViewPager, and Subfragments are its pages. All works correctly when I just go to Fragment from the drawer, but I don't know how to switch directly to a ViewPager's given page (nested fragment).

MainActivity with handling nav drawer clicks:

@Override
protected void onNavItemSelected(int id) {
    switch ((int)id) {
        case 1:
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new MainFragment())
            .addToBackStack(null).commit(); 
            break;
        case 100:
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new Fragment1())
            .addToBackStack(null).commit();
            break;
        case 200:
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new Fragment2())
            .addToBackStack(null).commit();
            break;
        .
        .
        .
    }    
}

I suppose this should be something with getChildFragmentManager() and ViewPager's setCurrentItem(), but I can't get the first in my Main Activity (or don't know how) and I can't use the second because the pager is not created yet if I do something like this:

SubFragment11 a = new SubFragment11();
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, a).addToBackStack(null).commit();
a.setCurrentPagerItem(2);
AnarioN
  • 81
  • 4

1 Answers1

0

Provide the ViewPager fragment with a Bundle with a variable to control the selected item. When the Viewpager is created, get that integer and switch to that panel.

Matthew Reilly
  • 619
  • 6
  • 17