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

Я хочу добиться следующего макета для своего приложения для 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);

Я зафиксировал все изменения в упомянутом выше репозитории.


person Alexander Pacha    schedule 16.05.2013    source источник
comment
Вы решили эту проблему? Я хотел бы иметь точно такую ​​же структуру, о которой вы упомянули, и думал о том, чтобы использовать аналогичный подход.   -  person AlvaroSantisteban    schedule 03.09.2014
comment
К сожалению нет. Но если вы запустите его и запустите, было бы здорово, если бы вы могли добавить решение в репозиторий выше для будущих посетителей, которые столкнутся с той же проблемой (создайте запрос на включение).   -  person Alexander Pacha    schedule 04.09.2014


Ответы (1)


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

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

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

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

person ycagri    schedule 27.11.2015