Я хочу выполнить следующий макет для моего приложения Android (верхний макет для планшетов, нижний макет для смартфонов), включая возможность прокрутки между подэлементами:
Итак, я создал операцию 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);
Я внес изменения в репозиторий, упомянутый выше.