與含有按鈕的ID的片段=按鈕 創建應用在的Android CommitNow不調用onCreateView從的onCreate
@Override
protected void onStart() {
super.onStart();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.activity_main, new Testfrag())
.commitNow();
View b = findViewById(R.id.button);
}
b爲返回按鈕和片段onCreateView
該方法結束前被調用。 但在
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm= getSupportFragmentManager();
fm.beginTransaction()
.add(R.id.activity_main, new Testfrag())
.commitNow();
View b = findViewById(R.id.button);
}
b爲null並且片段onCreateView
不叫,直到該方法結束後。 這可能是一個「功能」,但在文檔中沒有任何關於它的內容。
爲什麼現在承諾行爲不同onCreate
- 不叫onCreateView
直到後來何onCreateView
同步調用在onStart(或任何其他事件處理程序)?
這是一個有趣的想法和活動和片段生命週期如何配合在一起的文檔並不清楚。但是,如果您使用標籤包含片段,則FragmentManager會在Activitys OnCreate中調用onCreateView。 我會看看我是否可以詳細瞭解兩個生命週期如何同步。 –
@MikeJames我發現最好不要將兩個生命週期連接在一起。例如,使用ViewPager時,片段的生命週期變得非常複雜。把它們想象成兩個獨立的實體。 – DeeV
我可以看到,忽略活動和片段生命週期之間的任何同步是一個簡化,當你正在考慮設計一個片段時,但在這種情況下,它已被認爲是理解正在發生的事情的根本。假設是活動不會「推動」片段的狀態,而不是當時的狀態。仍在試圖弄清楚如何確定這確實是怎麼回事。 –