Я хочу добиться следующего макета для своего приложения для Android (верхний макет для планшетов, нижний макет для смартфонов), включая возможность прокрутки между подэлементами:
Итак, я создал действие Master/Detail-Flow с Eclipse, которое отлично работает. Что касается вкладок, я рассмотрел образцы библиотеки поддержки (<sdk>/extras/android/support/v4/samples/
), где приведен прекрасный пример (FragmentTabsPager.java), который расширяет класс FragmentActivity
и использует ViewPager
и виджет TabHost
.
Моя идея заключалась в том, чтобы объединить оба примера в одно приложение, поэтому вместо использования TabPage в качестве действия я хочу использовать его как фрагмент. На смартфоне это работает хорошо, а на планшете работает только один раз (имеется в виду, что при первом запуске контент загружается правильно, но как только я нажимаю на другой элемент в левом списке, контент больше не загружается ). Чтобы быть более точным: вкладки загружаются и имеют правильную метку, но содержимое, которое должно отображаться в области содержимого вкладки, отсутствует, хотя вы можете перемещаться между вкладками, как если бы содержимое было там.
Мои вопросы:
- Имеет ли смысл этот подход (объединить мастер/подробности с вкладками)? Или я должен использовать совершенно другой подход?
- Знаете ли вы, как решить проблему, когда контент загружается неправильно?
Чтобы было легче увидеть, я создал демо-приложение с нуля именно с этой идеей, которое можно скачать с https://github.com/apacha/MasterDetail_And_Tabs.
Связанные сообщения в Stackoverflow, которые не устранили проблему: ViewPager PagerAdapter не обновляет представление а>,
Edit1: я узнал о http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html и нашел Android FragmentTabHost — еще не полностью пропеченный?. С помощью этих подсказок мне удалось почти запустить его, но теперь я могу выбирать между рабочей версией, которая не обеспечивает поддержку смахивания (если я добавлю вкладки непосредственно на tabHost:
FragmentTabHost mTabHost = new FragmentTabHost();
// Add directly to tab-host
mTabHost.addTab(mTabHost.newTabSpec("simple1").setIndicator("Simple1"), CountingFragment.class, b);
глючной реализации swipe-implementation, если я добавлю ее и использую 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);
Я зафиксировал все изменения в упомянутом выше репозитории.