【问题标题】:Get Fragment instance in Activity在Activity中获取Fragment实例
【发布时间】:2016-07-19 10:55:43
【问题描述】:

我已将 Fragment 添加到 Activity 之类的

getSupportFragmentManager().beginTransaction()
                    .add(R.id.container,new MyFragment).commit();

其中containerFrameLayout 的id

 <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

现在我如何获得 Fragment in Activity like this

的实例

Fragment B 得到结果后,我必须调用Fragment A 的方法。

我在 Fragment B 中创建了一个接口,并在 Activity 中实现了它。现在我必须将结果传递给 Fragment A。我无法获取 Fragment A 的实例。

我不想做的一件事是在 Activity 中创建 Fragment A 的私有实例并调用它的方法。

【问题讨论】:

  • 你可以将这个方法设为静态
  • 为什么要获取 Fragment 实例?最好在 Activity 中创建一个接口并覆盖方法并从 Fragment 调用它。这样就可以将所有数据从 Fragment A 获取到您的 Activity
  • 使用这个 getActivity().getSupportFragmentManager().beginTransaction() .add(R.id.container,new MyFragment).commit();
  • 使用 FragmentTransaction 的 add(int containerViewId, Fragment fragment, String tag) 方法和 FragmentManager 的 findFragmentByTag(String) 方法。

标签: android android-fragments interface fragmentmanager android-framelayout


【解决方案1】:

关注这个link:

所有 Fragment 到 Fragment 的通信都是通过关联的 Activity 完成的。两个 Fragment 永远不应该直接通信。

因此我会推荐:

  1. Fragment B 中定义interface
  2. activity 中实现interface
  3. 最后,将消息传递给Fragment A

Code example and reference.

【讨论】:

  • 步骤 (3) 不遵循步骤 (1) 和 (2)。
【解决方案2】:

试试这个

getSupportFragmentManager().beginTransaction()
                .add(R.id.container,new MyFragment(),"MyFragment").commit();

获取片段

MyFragment frag = ((MyFragment) getSupportFragmentManager().findFragmentByTag("MyFragment"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多