看了有關這個問題的幾篇博文,幾乎都是引用了stackoverflow上的一個回答;
問題:
I know that a fragment’s view hierarchy has to be inflated in onCreateView, but what other functionality can be in onCreateView vs. what should wait for onActivityCreated? My current implementation uses separate activities for everything, and a typical activity does most of its work in its onCreate method, including inflating the view, setting the content view, initializing the various widgets with data, setting up listeners, etc.
大概意思就是:哪些代碼應該在onCreateView()執行哪些應該在onActivityCreate()中執行;
回答:
If your view is static, then moving any code to the onActivityCreated method is not necessary. But when you - for instance, fill some lists from the adapter, then you should do it in the onActivityCreated method as well as restoring the view state when setRetainInstance used to do so.
Also accessing the view hierarchy of the parent activity must be done in the onActivityCreated, not sooner.
大概意思就是:如果您的View是靜態的,那么就沒有必要在onActivityCreate()中執行;如果您的View是動態的,比如使用ListView等需要Adapter填充的,View就需要在onActivityCreate()中執行。(靜態的View不是指Static View,而是指后期不需要修改的View)
個人理解:
onCreateView():
這個方法就相當於Activity onCreate()方法中的 setContentView()是進行XML視圖填充的,這也是為什么setContentView()這個方法幾乎要寫在onCreate()方法的第一行的原因,因為如果XML視圖還沒填充,我們就沒有辦法對每個View進行操作,所以我們在每個Fragment中對每個View進行操作的時候都必須在onCreateView()后面執行。
onActivityCreate():
這個相當於Activity中 onCreate()中 setContentView()這句話后面的代碼。
這里可能就有人會想了: 那我完全可以把 對每個View操作的代碼放在onCreateView()代碼塊結尾處寫啊,完全沒必要分開到onActivityCreate()中寫啊,分開寫反而讓人更容易模糊。
個人理解:
1. 一個是單一原則,能引起一個方法改變的原因只能有一個,onCreateView()只負責視圖填充,onActivityCreate()負責對視圖修改,如果你的視圖不需要修改那就放在onCreateView()中寫吧。 當然這個說法不是特別站得住腳。不過還是能幫助記憶的。
最后加上一句剛從stackoverflow上學到的一句話
Don’t think everyone got it, Diffy, but they were just happy with the answer
不要認為每個人都懂了,只是他們對答案滿意了
如果您看了這篇博客您覺得我說的對,請您不要以為您懂了,因為這是您對這個答案滿意了
---------------------
作者:maxcion
來源:CSDN
原文:https://blog.csdn.net/maxcion/article/details/77906982
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!