何时使用FragmentTransaction的attach和detach方法

Gin*_*Jim 31 android fragment fragmenttransaction

我刚刚通过的文件去attach()detach()方法FragmentTransaction:

attach():在先前已从UI分离后重新附加片段detach(Fragment).这会导致其视图层次结构被重新创建,附加到UI并显示.

嗯,这是什么意思?

  1. 更具体地说,我看到了一个例子:

    mMapFragment = new MapFragment();
    ft.beginTransaction(mMapFragment)
      .attach()
      .add(R.id.container, mMapFragment)
      .commit();
    
    Run Code Online (Sandbox Code Playgroud)

    我删除了attach()并再次尝试:我没有发现任何差异.什么是attach在这个例子吗?与此相比有何不同:

    ft.beginTransaction()
      .add(R.id.container, mMapFragment)
      .commit();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果上面的例子是不够好,以示区别.我只是想知道做的时候,我们需要调用attach()detach()明确?如果你可以解释添加/删除/替换方面的差异会更好.

VSB*_*VSB 87

我认为最好在FragmentTransaction文档中查看Detach和Remove的定义,以了解发生了什么.

分离

从UI中分离给定的片段.这与放在后台堆栈时的状态相同:片段从UI中删除,但片段管理器仍在主动管理其状态.进入此状态时,其视图层次结构将被销毁.

去掉

删除现有片段.如果它已添加到容器中,则其视图也将从该容器中删除.

它的意思是:

通过分离,您只需销毁片段View,但将其状态保留在片段管理器中.但是,通过删除,您将从片段管理器中删除片段及其状态; 此外,如果将片段视图添加到UI容器,它将删除片段视图.因此,它们都会破坏片段视图,但是分离会将片段状态保留在片段管理器中.


现在是时候看看附加和添加.

将片段添加到活动状态.此片段还可以选择将其视图(如果Fragment.onCreateView返回非null)放入活动的容器视图中.

连接

在先前已从具有分离(片段)的UI中取消片段之后重新附加片段.这会导致其视图层次结构被重新创建,附加到UI并显示.

它的意思是:

添加Fragment后,它将被添加到活动状态,其视图将添加到已定义的Container视图中.但如果片段尚未添加到UI,则通过附加将不会显示任何内容.它只是附加到片段管理器.但是,如果视图已添加到UI中的容器并在此之后分离,则通过附加它将再次显示在其容器中.最后,如果要暂时销毁片段View并希望在将来显示和构建其视图而不会丢失其活动内的状态,则可以使用attach和detach.

  • 我知道你写这篇文章已经有一段时间了,但感谢上帝的解释! (3认同)