在許多網站中,我發現片段必須始終嵌入到活動中,並且片段的生命週期直接受到宿主活動生命週期的影響 - 活動暫停時,其中的所有片段以及何時活動被破壞,所有的碎片也是如此。活動中的片段生命週期
但是,它也寫在那裏,我們可以在不同的活動中重用片段 - 但從上面看,如果我們移動到另一個活動,片段將被銷燬。我錯過了什麼,或者,有人能給我一個在不同活動中重複使用相同片段的例子嗎?
在許多網站中,我發現片段必須始終嵌入到活動中,並且片段的生命週期直接受到宿主活動生命週期的影響 - 活動暫停時,其中的所有片段以及何時活動被破壞,所有的碎片也是如此。活動中的片段生命週期
但是,它也寫在那裏,我們可以在不同的活動中重用片段 - 但從上面看,如果我們移動到另一個活動,片段將被銷燬。我錯過了什麼,或者,有人能給我一個在不同活動中重複使用相同片段的例子嗎?
我想你感到困惑與Fragment
實施和Fragment
實例的概念。您可以在不同的Activity
中使用相同的Fragment
實現,但對於每個Activity
,您需要新的Fragment
實例。該實例的生命週期將直接受到主機Activity
生命週期的影響。
有一個Fragment
,姑且稱之爲FragmentA
,和一對夫婦Activity
,姑且稱之爲ActivityA
和ActivityB
,你有3類:
public FragmentA extends Fragment {
// All the FragmentA implementation
}
public ActivityA extends Activity {
// All the ActivityA implementation
}
public ActivityB extends Activity {
// All the ActivityB implementation
}
在這種情況下,你可以使用的FragmentA
展位落實ActivityA
和ActivityB
,但是對於每種情況,您都需要創建FragmentA
的新實例。
public ActivityA extends Activity {
loadFragmentA() {
FragmentA instanceA = new FragmentA();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, instanceA)
.commit();
}
}
public ActivityB extends Activity {
loadFragmentA() {
FragmentA instanceB = new FragmentA();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, instanceB)
.commit();
}
}
這樣,instanceA
將涉及到ActivityA
和instanceB
生命週期會涉及到ActivityB
生命週期,但展位是FragmentA
實例。
重用意味着一定Fragment
(FragmentA
)是不依賴於某個Activity
(ActivityA
),但可以通過不同的Activities
(ActivityB
,ActivityC
)一起使用。這並不意味着您可以在Activities
之間傳遞Fragment
實例。
你明白了一點。通過重用,意味着我們可以在多個地方使用一個片段(定義),而不是片段對象本身。這並不意味着您可以在活動之間傳遞片段實例。對於新的活動,有一個新的SupportFragmentManager/Manager。所以,你必須創建一個相同片段的新實例。
片段因此允許您只保留一塊不同屏幕的代碼。
這裏的關鍵是onAttach(Activity)方法的片段,一旦片段與父活動相關聯,就會調用片段。
您爲任何需要使用片段並將其用於片段事務的活動創建片段類的實例。
DetailsFragment details = DetailsFragment.newInstance(index);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.details, details);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
如果你想重用一個片段,你應該把這個活動轉換成一個片段。
您只能重用您想要執行事務(活動或片段)的FragmentManager的現有片段的片段。
看到這個職位從FragmentManager: https://developer.android.com/reference/android/app/FragmentManager.html 的片段在堆棧中允許的,如果你調用方法addToBackStack的交易。
ActivityB如何使用FragmentA? – user2637293
在活動b中,您將有第二個片段實例不相同。 – Alok