Ответ 1
Похоже, вы используете библиотеку поддержки v4, и вы забыли поставить и id на свой фрагмент xml-тега:), поэтому:
, откуда оно взялось?
Он исходит из строки 888 FragmentManager, где вы можете увидеть это:
f.mView = NoSaveStateFrameLayout.wrap(f.mView);
Причиной этого является обратная совместимость и лучше объясняется в заголовке комментария NoSaveStateFrameLayout
, который гласит:
/**
* Pre-Honeycomb versions of the platform don't have {@link View#setSaveFromParentEnabled(boolean)},
* so instead we insert this between the view and its parent.
*/
могу ли я избавиться от него?
Ну, я могу подумать о трех вариантах:
- У вас может быть ваша собственная реализация
FragmentManager
на основе версии версии v4 для версии, в которой вы опускаете этот контейнер, но я думаю, что усилия по написанию/поддержанию этого кода не стоят, плюс я не думаю, что накладные расходы из-за того, чтоFrameLayout
является гигантским, если у вас есть проблемы с производительностью, у вас, возможно, есть другие оптимизацииView
для выполнения помимо этого (скажем, написать пользовательский вид, которыйextends View
-), или сказать переосмыслить ваш макет/фрагменты, чтобы уменьшить количество просмотров в иерархии в определенной точке. - Дождитесь появления новой версии библиотеки поддержки v4, которая выполнит 1. < - yup. Я ленивый человек: D, вам придется записывать ошибку, если ее еще нет (см. 3.), крутая часть этого, вы можете даже внести свой патч или кого-то еще.
- Поддержка только платформ (или дождаться), когда библиотека поддержки v4 не нужна (дольше), в реализации уровня API 11+
FragmentManager
не имеет этого вложенногоViewGroup
(см. строка 861 из 11+FragmentManager
), на тех, у кого вы получите что-то вроде этого:
Я бы не стал волноваться за тех, о которых я упоминал, есть другие оптимизации, которые вы можете инвестировать в это время;)