Как использовать Master/Detail Flow вместе с вкладками на Android

Я хочу выполнить следующий макет для моего приложения Android (верхний макет для планшетов, нижний макет для смартфонов), включая возможность прокрутки между подэлементами: Application Layout on Tablet (upper) and on Smartphone (lower)

Итак, я создал операцию Master/Detail-Flow с Eclipse, которая отлично работает. Для вкладок я просмотрел образцы Support-Library (<sdk>/extras/android/support/v4/samples/), где дается красивый пример (FragmentTabsPager.java), который расширяет класс FragmentActivity и использует ViewPager и TabHost -Widget.

Моя идея состояла в том, чтобы объединить оба примера в одно приложение, поэтому вместо использования TabPage как Activity я хочу использовать его как Фрагмент. На смартфоне это работает хорошо, но на планшете он работает только один раз (это означает, что при первом запуске контент загружается правильно, но как только я нажимаю на другой элемент в левом списке, больше содержимого не загружается). Точнее: вкладки загружаются и имеют правильную метку, но содержимого, которое должно отображаться в области содержимого вкладки, нет, хотя вы можете прокручивать между вкладками, как если бы содержимое было там.

Мои вопросы:

  • Является ли этот подход значимым (чтобы совместить мастер/детали с вкладками)? Или я должен использовать совершенно другой подход?
  • Вы знаете, как исправить проблему, что контент не загружается должным образом?

Чтобы было проще видеть, я создал демо-приложение с нуля именно с этой идеей, которую можно загрузить с https://github.com/apacha/MasterDetail_And_Tabs.

Связанные записи в Stackoverflow, которые не исправили проблему: ViewPager PagerAdapter не обновляет представление,

Edit1. Я узнал о http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html и нашел Android FragmentTabHost - еще не полностью выпечен?. С этими подсказками мне удалось почти полностью запустить его, но теперь я могу выбрать между рабочей версией, которая не поддерживает поддержку swipe (если я добавлю Tabs непосредственно в tabHost:

FragmentTabHost mTabHost = new FragmentTabHost();
// Add directly to tab-host
mTabHost.addTab(mTabHost.newTabSpec("simple1").setIndicator("Simple1"), CountingFragment.class, b);

неудачной реализации swipe, если я добавлю его и использую FragmentPagerAdapter

FragmentTabHost mTabHost = new FragmentTabHost();
ViewPager mViewPager = (ViewPager) rootView.findViewById(R.id.pager);
TabsAdapter mTabsAdapter = new TabsAdapter(getActivity(), mTabHost, mViewPager);
// Add to tab-host-adapter
mTabsAdapter.addTab(mTabHost.newTabSpec("simple1").setIndicator("Simple1"), CountingFragment.class, b);

Я внес изменения в репозиторий, упомянутый выше.

Ответ 1

Я реализовал простой проект master-slave здесь https://github.com/ycagri/MasterSlave.

Я сохранил это в публичном репо. Если вы хотите играть и добавить еще некоторые функции, не стесняйтесь развиваться. savedInstanceState может быть реализовано для изменений ориентации.

В принципе, проект имеет два макета для MainActivity внутри макетов и макетов sw600dp-land. В ландшафте планшетов фрагменты определяются внутри макета. В противном случае фрагменты добавляются с помощью диспетчера фрагментов. Если вы можете найти рабский фрагмент из макета, вы используете планшет с ландшафтным режимом.

Надеюсь, что это поможет...