【问题标题】:Replacing FrameLayout in Activity by a Fragment does not replace the whole FrameLayout用Fragment替换Activity中的FrameLayout并不会替换整个FrameLayout
【发布时间】:2020-04-07 20:53:50
【问题描述】:

我将简要介绍一下我的应用布局。有一个Activity,里面是一个FrameLayout,里面有一个RelativeLayout(这个RelativeLayout里面还有一些其他的小部件),它的尺寸设置为'Match Parent'。在 MainActivity 中,我进行了片段事务,将 FrameLayout 替换为片段。

Activity 和 Fragment 之间的共同点是它们的顶部都有一个 Tab Menu。现在,当 Fragment 替换 FrameLayout 时,Fragment 的 Tab Menu 应该会替换 Activity 的 Tab Menu(FrameLayout 设置为 Match Parent 尺寸)。 但是,这不会发生。

只有 Fragment 中的 RecyclerView 显示在 Activity 的 RecyclerView 上方(我在 Activity 和 Fragment 中各有一个 RecyclerView)。 Tab Menu 与 Activity 保持一致。

这非常令人困惑。 我错过了什么吗?

【问题讨论】:

  • FragmentTransactions 只处理属于Fragments 的Views。它们不会删除或替换您布局中可能包含的任何其他 Views。如果您想要替换 Activity 的原始内容,正确的做法是将该内容移动到您在启动时加载的自己的 Fragment 中。容器<FrameLayout> 应该是空的。
  • @Mike 将 Activity 代码迁移到 Fragment 需要注意哪些事项?
  • @MikeM。你能分享一个例子吗?

标签: android android-layout android-fragments android-framelayout


【解决方案1】:

从activity移动到Fragment时,需要在activity的views上设置View.Gone才能达到想要的view。

您可以像这样删除活动视图。

在Activity中,在进行分片交易之前,

   //whatever view you want to remove//.setVisibility(View.GONE) 

从fragment返回Activity时,应将View的Visibility设置回可见。

【讨论】:

  • 谢谢,它有效,但有一个滞后。我可以做点什么让用户实际上看不到这种滞后吗?
猜你喜欢
  • 1970-01-01
  • 2016-05-21
  • 2013-11-09
  • 2014-11-24
  • 2014-02-24
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多