【问题标题】:Android Honeycomb: layout problem - hide/show FrameLayoutsAndroid Honeycomb:布局问题 - 隐藏/显示 FrameLayouts
【发布时间】: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() 之前被调用,所以在 BC 中,蓝色片段“跳”到左侧和顶部,并且仅在之后(在 D 中)被替换为黄色片段。这会产生令人讨厌的闪烁。

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

【问题讨论】:

  • 你在使用片段交易吗?另外,您能否详细说明“并且只有在之后才被替换”?
  • 嗨罗曼!是的,我正在使用片段交易。我添加了更多信息,请查看我的编辑。

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


【解决方案1】:

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

ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

其次,我已经放弃了让系统为我管理片段堆栈——似乎这只适用于简单的事务。覆盖 onBackPressed 并在那里执行您自己的逻辑。

--兰迪

【讨论】:

  • 嗨兰迪,感谢您的回答。 :) 在第一部分,我也有这个想法,但被困在“交易后”位上。在 commit() 之后事务并没有立即生效,这真的很不方便。我现在想在 Fragment 本身中进行隐藏/显示(我可以确定交易已经完成)。你的第二个想法听起来不错。到目前为止,我在片段堆栈管理方面没有遇到更多问题,但很容易相信它并不总是 100% 有效。没想到这么“简单”的解决方案,谢谢!
  • @jellyfish -- 我昨天发现了一些可能真的有帮助的东西 -- LayoutTransitions。这允许您定义在布局更改时发生的特定动画;当视图被隐藏时,您也许可以使用它在过渡上添加一个很好的滑动效果。有关文档,请参阅 developer.android.com/guide/topics/graphics/… ——这对您来说可能就像单个 xml 更改一样简单。
猜你喜欢
  • 1970-01-01
  • 2012-05-21
  • 2012-08-03
  • 2014-04-13
  • 2011-06-07
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多