Почему единственный дочерний элемент моего TabHost FrameLayout загружается с видимостью = View.GONE? - PullRequest
2 голосов
/ 24 февраля 2011

Я использую TabHost для рендеринга некоторых вкладок. В определении XML все настроено ~ обычно, RelativeLayout является единственным потомком FrameLayout для TabHost.

Странно, этот относительный макет всегда загружается как View.GONE. Установка видимости RelativeLayout в файле XML не меняет этого. Вызов .setVisibility во время onCreate, чтобы вручную сделать видимым RelativeLayout, работает, но чувствует себя неправильно. Переключение между вкладками также делает RelativeLayout снова видимым.

Я что-то упустил? Нормально ли указывать вкладки вручную как XML-потомки FrameLayout?

1 Ответ

6 голосов
/ 15 сентября 2011

Я потратил некоторое время на чтение TabHost.java и обнаружил, что происходит.

  • TabHost.java (наивно IMO;)) предполагает, что разные вкладки привязаны к разным представлениям контента.

  • Каждый раз, когда в TabSpec добавляется представление содержимого, видимость представления устанавливается в GONE.

  • Каждый раз, когда TabSpec добавляется к TabHost, TabHost переключается на вкладку 0.

  • Каждый раз, когда вызывается setCurrentTab, видимость представления этой вкладки устанавливается в VISIBLE, если и только если вновь выбранная вкладка не является текущей вкладкой.

Когда для одного и того же представления добавляются несколько вкладок:

  • сначала добавляется представление, и его видимость устанавливается на GONE,
  • , затем TabHost переключается на вкладку 0 и устанавливает вид для VISIBLE,
  • затем добавляется следующая вкладка, и ее вид (тот же вид!) Имеет значение vis, установленное на GONE,
  • затем TabHost переключается на вкладку 0, которая является ~ noop, потому что вкладка 0 была ранее выбрана, поэтому представление не переключается обратно в VISIBLE.

Так что это было вызвано использованием одного и того же представления для содержимого нескольких вкладок.

Итак, чтобы исправить этот вызов: tabHost.getCurrentView (). SetVisibility (View.VISIBLE); ... после добавления всех вкладок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...