Android Honeycomb:布局问题-隐藏/显示FrameLayouts

在我的活动中,我有一个包含3个FrameLayouts的布局,一个在顶部,一个在左侧,一个在“中心”.

现在,我有时只想显示其中的一两个. Atm我这样做是这样的:

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(...);

但是,这可能会得到非常丑陋的结果,例如当我切换“内容”片段并隐藏顶部和/或左侧的FrameLayout时.当“内容”片段跳到顶部和/或左侧时,所有内容开始闪烁,然后才替换.

另外,我显然不能导航回其他设置,那么还有其他方法可以做到这一点吗?

亲切的问候,
海蜇

编辑:

也许画些小图可以使我的问题更清楚…

A显示包含3个不同片段的3个FrameLayouts的布局.每种颜色代表一个不同的片段.

现在我要做的是从A切换到D.
我这样做是通过FragmentTransaction将蓝色Fragment替换为黄色Fragment.

但是,这仍然使其他框架保持可见,因此我通过上面的代码将其隐藏.

现在,Frame.setVisibility()在commit()之前被调用,因此在B和C中,蓝色片段“跳”到左侧和顶部,并且仅在其后(在D中)被黄色片段替换.这会产生令人讨厌的闪烁.

作为一种解决方法,我现在在交易之前隐藏所有三个FrameLayouts,并在交易完成后重新显示我需要的三个.但是仍然存在无法通过“后退”按钮返回的问题,因为这不是真正的交易.

最佳答案
我有两个建议.首先,如果您既添加了片段过渡效果,又在交易后进行了可见性更改,则可能会大大减少很多闪烁效果

ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

其次,我只是放弃了让系统为我管理片段堆栈-看来这仅适用于简单事务.覆盖onBackPressed并在那里执行您自己的逻辑.

–randy

转载注明原文:Android Honeycomb:布局问题-隐藏/显示FrameLayouts - 代码日志