【发布时间】:2011-06-16 14:32:33
【问题描述】:
在我的Activity 中,我有一个包含 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(...);
但是,这可能会得到非常糟糕的结果,例如当我切换“内容”Fragment 并隐藏顶部和/或左侧FrameLayout 时。当“内容”Fragment 跳到顶部和/或左侧时,这一切都开始闪烁,然后才被替换。
另外,我显然无法导航回另一个设置,那么有没有其他方法可以做到这一点?
亲切的问候, 水母
编辑:
也许一张小图能让我的问题更清楚......
A 显示了 3 个 FrameLayouts 的布局,其中包含 3 个不同的 Fragment。每种颜色代表一个不同的片段。
现在我想做的是从A切换到D。
我通过FragmentTransaction 将蓝色片段替换为黄色片段来做到这一点。
但是,这仍然使其他框架可见,因此我通过上面的代码将它们隐藏。
现在,Frame.setVisibility() 在 commit() 之前被调用,所以在 B 和 C 中,蓝色片段“跳”到左侧和顶部,并且仅在之后(在 D 中)被替换为黄色片段。这会产生令人讨厌的闪烁。
作为一种解决方法,我现在在事务之前隐藏所有三个 FrameLayout,并在事务完成后重新显示我需要的那些。但是仍然存在无法通过返回按钮返回的问题,因为这不是真正的交易。
【问题讨论】:
-
你在使用片段交易吗?另外,您能否详细说明“并且只有在之后才被替换”?
-
嗨罗曼!是的,我正在使用片段交易。我添加了更多信息,请查看我的编辑。
标签: android android-layout android-3.0-honeycomb android-fragments