в моем Activity
, у меня есть макет, содержащий 3 FrameLayout
с, один сверху, один слева и один в центре.
Теперь я иногда хочу толькопоказать один или два из них.Я делаю это следующим образом:
FrameLayout frame = (FrameLayout) findViewById(R.id.framelayout_menu_left);
frame.setVisibility(...);
frame = (FrameLayout) findViewById(R.id.framelayout_content);
frame.setVisibility(...);
frame = (FrameLayout) findViewById(R.id.framelayout_menu_top);
frame.setVisibility(...);
Однако это может привести к действительно ужасным результатам, например, когда я переключаю «контент» Fragment
и скрываю верхнюю и / или левую FrameLayout
.Все начинает мигать, когда «содержимое» Fragment
переходит наверх и / или влево и только после этого заменяется.
Кроме того, я, очевидно, не могу вернуться к другой настройке, так есть ли другой способ сделать это?
С уважением, медуза
Редактировать:
Возможно, небольшой рисунок прояснит мой вопрос ...
![Layout](https://i.stack.imgur.com/0X1kv.gif)
A показывает макет из 3 FrameLayouts, содержащий 3 разныхФрагменты.Каждый цвет представляет один отдельный фрагмент.
Теперь я хочу переключиться с A на D .Я делаю это, заменяя синий Фрагмент желтым Фрагментом через FragmentTransaction
.
Тем не менее, это по-прежнему сохраняет другие Фреймы видимыми, поэтому я скрываю их с помощью кода выше.
Теперь Frame.setVisibility()
вызывается задолго до commit (), поэтому в B и C синий фрагмент «перепрыгивает» влево и вверх и только потом (в D ) заменяется желтым фрагментом.Это вызывает неприятное мерцание.
В качестве обходного пути я теперь скрываю все три FrameLayouts перед транзакцией и повторно показываю те, которые мне нужны, после завершения транзакции.Но все еще есть проблема, что я не могу вернуться с помощью кнопки «назад», поскольку это не настоящая транзакция.