в моем Activity
, у меня есть макет, содержащий 3 FrameLayout
s, один вверху, один слева и один в центре.
Теперь я иногда хочу отображать только один или два. Атм, я делаю это так:
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
переходит в верхнюю и/или левую и только потом заменяется.
Кроме того, я, очевидно, не могу вернуться к другой настройке, так есть ли другой способ сделать это?
С уважением, медузы
Edit:
Возможно, небольшой рисунок делает мой вопрос яснее...
A показывает макет из 3 кадров, содержащих 3 разных фрагмента. Каждый цвет представляет собой один отдельный фрагмент.
Теперь я хочу переключиться с A на D.
Я делаю это, заменив синий фрагмент желтым фрагментом на FragmentTransaction
.
Однако это все еще сохраняет видимость других фреймов, поэтому я скрываю их через код выше.
Теперь Frame.setVisibility()
вызывается до commit(), поэтому в B и C синий фрагмент "прыгает" влево, а верхний и только потом (в D) заменяется желтым фрагментом. Это вызывает мерзкое мерцание.
В качестве обходного пути я теперь скрываю все три FrameLayouts перед транзакцией и повторно показываю те, которые мне нужны после завершения транзакции. Но проблема в том, что я не могу вернуться через кнопку "Назад", поскольку это не настоящая транзакция.