簡體   English   中英

Android:在片段中放置活動的onCreate()代碼的位置?

[英]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.

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