【问题标题】:How to remove an underlying fragment programatically?如何以编程方式删除底层片段?
【发布时间】:2014-08-08 21:59:31
【问题描述】:

场景如下:

  1. “仪表板片段”-> 片段 1。此事务被添加到后台堆栈。将片段替换为“frag1”时指定了标签;

  2. Fragment 1 -> Fragment 2。此事务也被添加到后台堆栈。执行替换操作时带有标签。标签是让我们说“frag2”。

现在在片段 2 中,当用户想要保存数据时,它会调用 Web 服务。如果成功,我想用 NEW Fragment 1 替换 Fragment 2。如果用户按下取消按钮,它将简单地执行后按事件并加载 Fragment 1。

在Web服务调用成功的情况下,更换是正确的,但是当我按下返回按钮时,仍然有OLDER Fragment 1。原因很明显。

为了在 Fragment 2 中的 Web 服务调用成功时摆脱这种情况,我编写了以下代码。

if (null != getActivity().getSupportFragmentManager().findFragmentByTag("frag1")) {
          getActivity().getSupportFragmentManager().beginTransaction().remove
                  (getActivity().getSupportFragmentManager().findFragmentByTag("frag1"));
}

loadFragment1();

然后我使用回调方法将Fragment 1加载到相同的框架布局中并替换Fragment 2。

它进入 if 块内部,但旧片段“Fragment1”仍然存在 - 未受伤害。 我没有在方法 addToBackStack() 中使用任何标签,并保持它像这样 addToBackStack(null)

我无法删除旧的 Fragment 1。请让我知道这种方法有什么问题。谢谢。

【问题讨论】:

    标签: android android-fragments back-stack fragmenttransaction


    【解决方案1】:

    试试这个

    findViewById(R.id.fragment1).setVisibility(View.GONE); 
    

    【讨论】:

    • 它给了我 NullPointerException。我正在使用 findFragmentByTag().getView().setVisibility(View.GONE) 它提供了 NPE。我认为原因是,视图不可见,所以它给出了这个异常。
    • 在我的情况下,fragment1 是 xml 中的片段标记,在它之上我正在使用 java 动态添加/替换新片段
    • 你是说 FrameLayout id?
    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多