Я пишу приложение с 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);