Вау, спасибо, это выглядит великолепно. :)

мActivityУ меня есть макет, содержащий 3FrameLayouts, один сверху, один слева и один в «центре».

Теперь я иногда хочу отображать только один или два из них. Я делаю это так:

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 прыгает наверх и / или влево и только потом заменяется.

Кроме того, я, очевидно, не могу вернуться к другой настройке, так есть ли другой способ сделать это?

С уважением, медуза

Редактировать:

Может, маленький рисунок прояснит мой вопрос ...

A показывает макет из 3 FrameLayouts, содержащий 3 разных фрагмента. Каждый цвет представляет один отдельный фрагмент.

Теперь я хочу переключиться сA вD, Я делаю это, заменяя синий фрагмент желтым фрагментом черезFragmentTransaction.

Тем не менее, это по-прежнему сохраняет другие кадры видимыми, поэтому я скрываю их с помощью кода выше.

В настоящее время,Frame.setVisibility() вызывается перед commit (), поэтому вB а такжеC синий фрагмент «прыгает» влево и вверх и только потом (вD) заменяется желтым фрагментом. Это вызывает неприятное мерцание.

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

Ответы на вопрос(1)

Ваш ответ на вопрос