Android FragmentTransaction, вкладки ActionBar и несколько фрагментов

Итак, я создаю приложение для планшета с библиотекой совместимости и столкнулся со странностью, которую не могу понять. В одном действии у меня есть 2 вкладки (вкладка A и вкладка B) и 3 фрагмента (фрагменты A1, A2 и B). ActionBar.TabListener, связанный с вкладкой A, обрабатывает добавление и удаление фрагментов A1 и A2, а ActionBar.TabListener, связанный с вкладкой B, обрабатывает добавление и удаление вкладки B. Пока все хорошо.

Странное поведение проявляется, когда я запускаю действие (поэтому выбрана вкладка A, а фрагменты A1 и A2 отображаются слева направо, правильно) щелкните вкладку B (поэтому фрагменты A1 и A2 удаляются, а фрагмент B отображается, все еще правильно ), а затем снова нажмите на вкладку A! Теперь отображаются фрагменты A1 и A2, но в обратном порядке: A2, а затем A1!

Кто-нибудь сталкивался с этой странностью? Если я выберу вкладку B, а затем снова вкладку A, они снова изменятся в правильном порядке, и цикл продолжится. Согласно этой статье, "Если вы добавляете несколько фрагментов в один и тот же контейнер, то порядок, в котором вы их добавляете, определяет порядок их появления в иерархии представлений», что, как ни странно, теперь не так.

Есть идеи? Заранее спасибо!


person Shep Shapard    schedule 06.07.2011    source источник


Ответы (1)


Согласно этой статье: «Если вы добавляете несколько фрагментов в один и тот же контейнер, то порядок, в котором вы их добавляете, определяет порядок их появления в иерархии представлений», что, как ни странно, сейчас не так. .

Лично я бы на это не рассчитывал.

Например, предположим, что вы используете горизонтальный LinearLayout. Ваш текущий код, по-видимому, помещает оба фрагмента в LinearLayout. Мой подход заключается в том, чтобы иметь два FrameLayouts уже в LinearLayout и помещать каждый фрагмент в один из FrameLayouts.

person CommonsWare    schedule 06.07.2011
comment
Хм, это отличная идея! А затем, когда вы хотите отобразить только один фрагмент, просто скройте (установите вес равным 0) второй FrameLayout! Мне нужно будет попробовать это как можно скорее (сейчас я занимаюсь другим проектом). Есть идеи, почему вы думаете, что мы не можем рассчитывать на то, что говорится в документации? Это просто потому, что есть ошибка, или вы думаете, что есть что-то действительно логичное в том, как работают FragmentTransactions? - person Shep Shapard; 08.07.2011
comment
@Shep Shapard: Есть идеи, почему вы думаете, что мы не можем рассчитывать на то, что говорится в документации? -- потому что пример кода, который я видел, не полагается на этот оператор в кавычках. Кроме того, это просто внутреннее ощущение. - person CommonsWare; 08.07.2011
comment
Да... работа на переднем крае становится довольно раздражающей, потому что ты имеешь дело с недокументированными странностями направо и налево. Кстати, ваше решение сработало! Спасибо! - person Shep Shapard; 09.07.2011
comment
Может ли кто-нибудь сказать мне, как можно добавить несколько фрагментов на вкладку ActionBar, которая сама является фрагментом? (Вкладка Фрагмент с фрагментом A1 и A2) Я думал, что вложение не разрешено...? - person denis; 22.08.2012
comment
@and-dev: вложение фрагментов не поддерживается. - person CommonsWare; 22.08.2012
comment
@CommonsWare Значит, нет возможности иметь вкладки ActionBar + содержимое одной вкладки, включая несколько фрагментов? Я искал часы и не нашел способа, который позволил бы мне иметь несколько вкладок ActionBar (которые можно просматривать с помощью ViewPager) + иметь одну вкладку, содержащую более одного фрагмента. Знаете ли вы, как достичь этой цели? - person denis; 22.08.2012
comment
@and-dev: Значит, нет возможности иметь вкладки ActionBar + содержимое одной вкладки, включая несколько фрагментов? -- наверняка есть. Вы просто не можете сказать, что содержимое отдельной вкладки панели действий представляет собой единый фрагмент, удерживающий другие фрагменты. Никто не направляет пистолет вам в голову, заставляя вас использовать FragmentTransaction, переданный вашему TabListener. Сделайте что-нибудь еще, чтобы повлиять на изменения в вашем пользовательском интерфейсе при выборе вкладок. - person CommonsWare; 22.08.2012
comment
@CommonsWare Хорошо понял. Знаете ли вы какой-либо пример реализации того, что вы упомянули? Я нашел только вкладку ActionBar + реализации ViewPager, которые основаны на фрагментах на вкладке. - person denis; 22.08.2012