Android:嵌套片段的父片段

28

我的嵌套片段中的getParentFragment()返回了一个null。我意识到获取null意味着该片段已连接到活动而不是嵌套容器片段。但是我正在使用子FragmentManager显式将子片段嵌套在父片段内,因此认为不应该得到null。你能告诉我错在哪里吗?

父片段

public class UsageBreakUp extends Fragment implements Filter.OnFragmentInteractionListener {

  ....

  @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        getChildFragmentManager().beginTransaction().add(R.id.filter, new Filter()).commit();
    }

...

}

子片段

public class Filter extends Fragment {

...


    public Filter() {
        if (getParentFragment() == null)
            Log.d(LOG_TAG, "parent fragment is null");
    }

...

}

请查看此链接:https://dev59.com/rmUq5IYBdhLWcg3wF8dQ#14804584 - SweetWisher ツ
@SweetWisherツ,我已经尝试过了。它没有起到作用。我已经更新了我的问题并添加了这些信息。 - Abhijith Madhav
那么关于这个呢??你确定你得到的*getParentFragment()*是NULL吗?因为看起来你正在尝试将Fragment转换为一个listener,这会抛出异常。 - SweetWisher ツ
尝试运行以下代码:UsageBreakUp = (UsageBreakUp) getParentFragment(); 并告诉我输出结果。同时请发布 LOGCAT。 - SweetWisher ツ
@SweetWisherツ,是 getParentFragment() 管理器返回了 null。我已经编辑了我的问题以使这一点更清晰。 - Abhijith Madhav
请查看以下内容:Once go though this - SweetWisher ツ
1个回答

49

我在子片段的构造函数中调用了 getParentFragment(),这样在子片段完全创建之前就被调用了。将 getParentFragment() 移动到 onCreateView() 中解决了这个问题。移动不是一个问题,因为我调用 getParentFragment() 来检查父片段是否实现了子片段交互侦听器。


1
我在 Kotlin 中从 onCreateView 调用 this.parentFragment,但仍然得到 null。有解决方法吗? - shafeeq
1
我的错误发生是因为我使用了 activity.supportFragmantManager 而不是 childFragmentManager - shafeeq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接