Android Honeycomb: проблема макета - скрыть / показать FrameLayouts - PullRequest
2 голосов
/ 16 июня 2011

в моем 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

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

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

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

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

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

1 Ответ

3 голосов
/ 18 июня 2011

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

ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

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

- randy

...