簡體   English   中英

片段方法:attach(),detach(),remove(),replace(),popBackStack()

[英]Fragment methods: attach(), detach(), remove(), replace(), popBackStack()

我對這些功能和它們的目的非常困惑。 我觀察到使用replace()用新的片段替換現有的片段。 我們可以使用addToBackStack(null)將該片段放在后面的堆棧中,這樣我們就可以回到之前顯示的片段了。 現在,當添加(或替換)片段時 - onAttach() - > onCreate() etc ....片段的方法按順序調用。

現在當我們從我們的活動調用片段上的remove()時,調用片段的哪些函數以及以哪種順序調用?

attach()detach()什么作用? detach()是否刪除了片段? 當使用這兩個attach()detach() ,會調用片段的哪些函數以及以哪種順序調用?

另外, popBackStack()會發生什么? 我的意思是當我們在活動的片段上使用popBackStack()時調用哪些函數?

什么時候onDestroy()調用?

謝謝。

現在當我們從我們的活動調用片段上的remove()時,調用片段的哪些函數以及以哪種順序調用?

請查看http://developer.android.com/reference/android/app/Fragment.html

順序是: onPause()onStop()onDestroyView()onDestroy()onDetach()

attach()和detach()有什么作用? detach()是否刪除了片段? 當使用這兩個attach()和detach()時,會調用片段的哪些函數以及以哪種順序調用?

attach()detach()分別將FragmentActivity關聯或分離。 附加Fragment ,會onAttach()生命周期方法,在分離時,會在Fragment調用onDetach()生命周期方法。 有關更多信息,請查看上面的鏈接。

另外,popBackStack()會發生什么? 我的意思是當我們在活動的片段上使用popBackStack()時調用哪些函數?

如果Fragment尚未被銷毀,那么在popBackStack()onStart()onResume()方法。 如果先前已經破壞了Fragment ,那么將從onAttach()開始調用生命周期方法。 當你按下Activities上的后退按鈕時,它就是一樣的。

關於popBackStack()一個注釋。 它不彈出片段,它會彈出片段事務。 因此無論最后一個片段事務是什么都被顛倒了 如果您正在顯示FragmentA並且您的交易是:

fragmentTransaction.replace(R.id.your_layout, fragmentB);
fragmentTransaction.addToBackStack(null);

它將使用FragmentB替換FragmentA ,並將該事務(不是片段)添加到后端堆棧。 如果你然后點擊后退按鈕,它會彈出后面的堆棧並獲得事務,即“用FragmentA替換這個FragmentB ”。 然后它反轉該交易。 向后,該指令是用FragmentA替換當前片段的任何內容。 如果原始FragmentA仍然存在,則使用該FragmentA 如果它被摧毀了,它會成為一個新的。

假設使用以下步驟將片段A和片段B添加到容器中:

1. Added fragment A =>  .replace(R.id.container, fragmentA) => addToBackStack(null)
2. Added fragment B =>  .replace(R.id.container, fragmentB) => addToBackStack(null)
3. Removed fragment B => fragmentManager.popBackStack();

調用fm.popBackStack()時的回調:

FragmentB: onPause()
FragmentB: onStop()
FragmentB: onDestroy()
FragmentB: onDetach()
FragmentA: onCreateView()
FragmentA: onViewCreated()
FragmentA: onActivityCreated()
FragmentA: onStart()
FragmentA: onResume()

解釋:為什么在使用popBackStack()刪除和銷毀片段B時,片段再次創建並恢復了視圖?

Ans:添加片段B時,使用了replace()和addToBackStack(),因此從容器中刪除了所有片段,並將片段B添加到容器中。 而且,此事務也記錄在Back堆棧中。 因此,當調用fm.popBackStack()時,首先從后向堆棧中彈出事務,因此操作自身恢復,因此片段b將從容器中刪除並銷毀。 並且添加了所有其他片段,對於我們的案例片段,A的視圖被添加到容器中。 還注意到片段A的onAttach&onCreate()沒有被調用,因為它已經創建並附加到MainActivity之前。

在片段B上按下后面做同樣的事情:

If you press the back button, it calls fm.popBackStack() and pops the transaction.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM