【问题标题】:How to load new fragment in same space as current fragment如何在与当前片段相同的空间中加载新片段
【发布时间】:2011-10-17 12:35:40
【问题描述】:

我正在寻找一些关于处理启动其他片段的片段的最佳方法的建议。

我正在转换一个我开始使用基于 Activity 的方法编写的应用程序,并且已经开始将其转移到使用 Fragments。我有一些 Fragment 用于启动一个新的 Activity,我想将它们移到当前 Fragment 所在的同一视图中启动其他 Fragment。

例如 - 我有一个 Activity,它有一个 WebView,它使用 WebViewClient 来处理内部 js->java 交互。我的 WebViewClient 可以启动其他活动,我曾经这样做过:

 i = new Intent(context, GoogleMapActivity.class);
 startActivity(i);

这个 webview 活动可以是全屏的,也可以是侧面有菜单的视图,但我希望 webview 尊重布局 - 所以如果菜单存在,它应该在启动新片段时保持存在 - 我只是不不知道编写启动片段的代码的最佳方法。

那么...有没有办法,在 Fragment 中,基本上告诉一个新的 Fragment 加载到与当前 Fragment 相同的空间,或者是否需要与 Activity 进行一些交互?

** 编辑 **

鉴于可以使用几种不同的布局,我并不总是知道应该定位哪个 id 来放置片段 - 因此我需要知道是否有办法在不知道 id 的情况下做到这一点(例如在replace 方法中)。

【问题讨论】:

标签: android android-fragments


【解决方案1】:
getFragmentManager().beginTransaction()
   .replace(((ViewGroup) getView().getParent()).getId(), fragment)
   .addToBackStack(null)
   .commit();

这应该用所需的片段替换父容器。

【讨论】:

    【解决方案2】:

    这应该可以通过FragementManager.replace() 实现。看看documentation for Fragment,尤其是那里“布局”部分中较长的示例。

    【讨论】:

    • 鉴于可以使用几种不同的布局,我并不总是知道应该定位哪个 id 来放置片段 - 因此我需要知道是否有办法这在不知道 id 的情况下。或者我应该使用什么方法 - 即我应该用相同的 id 命名所有片段?
    • 你也可以得到带有标签的片段。在替换而不是 id 之后,您可以将第一个参数作为片段传递。
    【解决方案3】:

    如果您想添加 Fragment 而不是替换它,请使用:

    getFragmentManager().beginTransaction().add(R.id.fragment_container, new Fragment()).commit();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多