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

时间:2011-06-16 14:32:34

标签: android android-layout android-3.0-honeycomb android-fragments

在我的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跳转到顶部和/或左侧,之后才会被替换。

另外,我显然无法导航回另一个设置,那么还有其他方法吗?

亲切的问候, 水母

修改

也许一点点的绘画让我的问题更加清晰......

Layout

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

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

然而,这仍然保持其他帧可见,所以我通过上面的代码隐藏它们。

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

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

1 个答案:

答案 0 :(得分:3)

我会提出两点建议。首先,如果您同时添加片段转换效果并在事务后进行可见性更改,那么可能会大大减少您的闪烁效应

ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

其次,我只是放弃让系统管理片段堆栈 - 似乎这只适用于简单的事务。覆盖onBackPressed并在那里做你自己的逻辑。

- 好色