[英]Android: Where to put activity's onCreate() code in a fragment?
我將我的所有活動轉換為碎片,以便我可以在ViewPager中使用它們。
我已經搜索了這個,但我找不到令人滿意的答案,所以這就是我在這里問的原因。
在我的活動中,我在onCreate()
方法中編寫了一些代碼。 我例如調用一些findViewById()
來將一些xml按鈕鏈接到我的Activity。 我還在onCreate()
創建了一些不可見的視圖,設置了一個OnClickListener()
,用文本填充TextView
並刪除了一個Notification,這些都在onCreate()
方法中。
我的問題是:我應該在片段中放置這些代碼? 在onCreate()? onCreateView()? onActivityCreated()? 為什么?
提前謝謝了!
雖然Pragnani的答案很接近,但它的教育價值卻很小。 此外,他的第二個陳述更合適。
我應該把這段代碼放在片段里? 在onCreate()? onCreateView()? onActivityCreated()? 為什么?
簡短的回答是: onCreateView()
或onActivityCreated()
都可以。 在onCreateView()
之前不會創建視圖層次結構,因此這是片段生命周期中最早的一點,你可以膨脹視圖並附加點擊監聽器等等。 因為onActivityCreated()
將始終在onCreateView()
之后運行 ,這是一個合適的位置。 可以跳過onCreate()
以支持系統臨時分離片段並重新附加片段,例如在保留片段時 。
Pragnani是正確的,指出膨脹片段的視圖與活動中的膨脹視圖略有不同。 更具體地說:片段沒有定義findViewById()
方法,因此您需要在其他對象上調用它。
而不是使用getActivity().findViewById()
,你需要getView().findViewById()
。 這樣做的原因是,如果您將活動用於視圖查找,那么當具有相同視圖ID的多個片段附加到該視圖時,您將遇到麻煩。 如果在各種片段的布局中重復使用視圖ID,或者顯示兩個顯示不同數據的相同片段,則會出現這種情況。 在這兩種情況下,只會返回第一個匹配,而您真的希望在片段的conext中查找視圖。 這正是getView()
返回的內容,片段的根視圖(您在onCreateView()
返回的),因此適當地限制了查找的范圍。
1. 將onCreate留空,只需調用super.onCreate()
2. 使用getActivity()而不是findViewById()。findViewById()始終使用getActivity(),您需要視圖的上下文。
Do all other operations in onCreateview()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.