Панель навигации с вложенными фрагментами (ViewPager)

Я пишу приложение с Navigation Drawer и использую вложенные фрагменты. Панель навигации создана в значительной степени в соответствии с документами Android - она ​​работает. Я хочу, чтобы панель навигации была видна всегда, поэтому у меня с ней одно действие, и я просто меняю местами фрагменты. Один из фрагментов - это ViewPager, который, в свою очередь, имеет свои собственные фрагменты в виде страниц.

Навигация имеет иерархическую структуру:

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

где Fragment - это ViewPager, а Subfragments - его страницы. Все работает правильно, когда я просто перехожу к Fragment из ящика, но я не знаю, как напрямую переключиться на ViewPager's заданную страницу (вложенный фрагмент).

MainActivity с обработкой щелчков на панели навигации:

@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;
        .
        .
        .
    }    
}

Я полагаю, это должно быть что-то с getChildFragmentManager() и ViewPager's setCurrentItem(), но я не могу получить первое в своем основном действии (или не знаю как), и я не могу использовать второе, потому что пейджер еще не создан, если я это сделаю что-то вроде этого:

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

person AnarioN    schedule 10.09.2013    source источник


Ответы (1)


Предоставьте фрагменту ViewPager Bundle с переменной для управления выбранным элементом. Когда Viewpager создан, получите это целое число и переключитесь на эту панель.

person Matthew Reilly    schedule 20.11.2013