Android hive : layout problem - hide/show FrameLayouts

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

在我的 Activity 中,我有一个包含 3 个 FrameLayout 的布局,一个位于顶部,一个位于左侧,一个位于“中心”。

现在,我有时只想显示其中一两个。 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 跳转到顶部和/或左侧时,所有内容都开始闪烁,然后才被替换。

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

亲切的问候, 水母

编辑:

也许画一点图可以让我的问题更清楚......

Layout

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

现在我想做的是从A切换到D。 我通过 FragmentTransaction 将蓝色 fragment 替换为黄色 fragment 来实现此目的。

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

现在,Frame.setVisibility() 在 commit() 之前调用,因此在 BC 中,蓝色 fragment “跳跃”左侧和顶部,然后(在 D 中)才被黄色 fragment 替换。这会产生令人讨厌的闪烁。

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

最佳答案

我有两个建议。首先,如果您添加 fragment 过渡效果并在事务后进行可见性更改,这可能会大大减少闪烁效果

ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

其次,我干脆放弃了让系统为我管理 fragment 堆栈——看来这只适用于简单的事务。重写 onBackPressed 并在那里执行您自己的逻辑。

--兰迪

关于Android hive : layout problem - hide/show FrameLayouts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373631/

相关文章:

java - 找不到 Robotium 存储库

android - 通过联系人选择器向 Android 中的 ContactsContract.CommonDataKinds.Event 添加事件

android - Android 开发中的 UI 访问

java - Android View 字段名称约定

android - 有什么方法可以使按钮上的图像自动调整大小以适合屏幕?

android - 如何在 Honeycomb 应用程序中显示 FragmentBreadCrumbs

android - 单击时 android 组件的掩码

Android Nexus 7 平板电脑模拟器无法加载正确的布局文件

android - 是否可以使用 Honeycomb (Android 3.0) 从平板电脑运行 R?

android - Android 应用程序如何决定是否要使用网络代理