【问题标题】:How can replace current Fragment without having container(view) id?如何在没有容器(视图)ID的情况下替换当前片段?
【发布时间】:2019-11-21 09:48:21
【问题描述】:

试图通过捕获其根视图 id 作为容器 id 将当前 Fragment 替换为另一个 以编程方式获得 Null 值异常。

  Fragment fragment = MyNewFragment.newInstance(name);
        getActivity().getSupportFragmentManager().beginTransaction()
                .replace(this.getView().getRootView().getId(), fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();

【问题讨论】:

  • this.getView().getRootView().getId() 这可能会导致空指针。你为什么不使用 xml 文件中给出的 id 而不是这个。
  • @PrashantSable 我的 Fragment 来自非原生外部环境的调用,所以我不知道它的 xml 或 ID。

标签: android android-fragments


【解决方案1】:

您可以使用 android.R.id.content

看看这个answer,这样你就知道为什么了。

【讨论】:

  • 感谢您的解决方案,它可以正常工作,但我的片段在视图寻呼机中,并且视图寻呼机有其父片段。所以现在它正在替换那个父片段而不是查看寻呼机子。
  • 那么下一个合乎逻辑的步骤是尝试 ravikwow 的答案,获取父视图的 id,而不是根视图。祝你好运。
【解决方案2】:

如果你想从片段中替换片段,那么你需要像这样获取容器ID

((View)getView().getParent()).getId()

【讨论】:

  • 这个解决方案对我来说效果更好(更可靠),只需确保viewparent 在检索 id 之前都不为空!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多