टुकड़ों में onCreate (), onCreateView () और onActivityCreated () के अंतर और उपयोग


329

क्या अंतर है onCreate(), onCreateView()और onActivityCreated()टुकड़े में और क्या वे एक के लिए इस्तेमाल किया जाएगा?



@BradLarson मुझे समझ नहीं आता कि यह क्यों बंद कर दिया गया था। यह एक अपेक्षाकृत लोकप्रिय प्रश्न साबित हुआ है और आपकी टिप्पणी में बताए गए लिंक से अलग है। यह सवाल तीन अलग-अलग तरीकों के बीच अंतर के बारे में पूछ रहा है और वे एक-दूसरे से कैसे तुलना करते हैं लेकिन आपकी टिप्पणी में जो प्रश्न जुड़ा हुआ है, उनमें से केवल दो तरीकों का उल्लेख है।
फारबोड सलामत-ज़ैदह

@ ब्रैडलर्सन मेला पर्याप्त और अच्छी तरह से देखा गया। अब हालांकि मेरी समझ है, क्या मैं एक उत्तर नहीं लिख सकता जो बेहतर तरीके से अतिरिक्त विवरण के लिए लिंक को संदर्भित करते हुए तीन तरीकों की तुलना करता है?
फारबोड सलामत-ज़ैदह

2
@ FarbodSalamat-Zadeh - ज़रूर। मैंने सवाल फिर से खोल दिया है, अगर आपको लगता है कि आप बेहतर जवाब दे सकते हैं। मैं बस इसे छोड़ नहीं करना चाहता था अगर मैं कर सकता अनुत्तरित।
ब्रैड लार्सन

जवाबों:


394

OnCreate ():

onCreate()एक में विधि Fragmentहै के बाद कहा जाता ActivityहैonAttachFragment() लेकिन इससे पहले कि Fragmentके onCreateView()
इस पद्धति में, आप चर निर्दिष्ट कर सकते हैं, Intentएक्स्ट्रा प्राप्त कर सकते हैं , और कुछ भी जो दृश्य पदानुक्रम (यानी गैर-ग्राफ़िकल इनिशियलाइज़ेशन) को शामिल नहीं करता है । इसका कारण यह है इस विधि जब कहा जा सकता है Activityकी onCreate()पूरा नहीं हुआ है, और इसलिए यहाँ देखें पदानुक्रम का उपयोग करने की एक दुर्घटना में हो सकता है की कोशिश कर रहा।

onCreateView ():

बाद onCreate()कहा जाता है (में Fragment), Fragmentके onCreateView()कहा जाता है। आप अपने Viewचर असाइन कर सकते हैं और कोई भी ग्राफिकल इनिशियलाइज़ेशन कर सकते हैं । आपसे Viewइस विधि से लौटने की उम्मीद की जाती है , और यह मुख्य UI दृश्य है, लेकिन यदि आपका Fragmentकोई लेआउट या ग्राफिक्स का उपयोग नहीं करता है, तो आप वापस लौट सकते हैं null(डिफ़ॉल्ट रूप से यदि आप ओवरराइड नहीं करते हैं)।

onActivityCreated ():

नाम राज्यों के रूप में, यह है के बाद कहा जाता Activityहै onCreate()पूरा कर लिया है । इसे बाद में कहा जाता है onCreateView(), और मुख्य रूप से अंतिम आरंभीकरण के लिए उपयोग किया जाता है (उदाहरण के लिए, UI तत्वों को संशोधित करना)।


योग करने के लिए ...
... लेकिन वे सभी Fragmentअलग-अलग समय पर बुलाए जाते हैं। पहले कहा जाता है, किसी भी गैर चित्रमय initialisations करने के लिए। इसके बाद, आप किसी भी वैरिएबल को असाइन और घोषित कर सकते हैं जिसका आप उपयोग करना चाहते हैं । बाद में, किसी भी अंतिम आरंभ को करने के लिए उपयोग करें जो आप एक बार सब कुछ पूरा करना चाहते हैं।
onCreate()ViewonCreateView()onActivityCreated()


यदि आप आधिकारिक Android प्रलेखन देखना चाहते हैं, तो यह यहां पाया जा सकता है:
- - -onCreate()
onCreateView()
onActivityCreated()

स्टैक ओवरफ्लो पर यहां कुछ अलग, लेकिन कम विकसित प्रश्न / उत्तर दिए गए हैं:


6
मुझे लगा कि मैं ऑनक्रिएट () में नॉन ग्राफिकल इनिशियलाइज़ेशन लागू करूंगा ताकि स्क्रीन के घूमने पर उन्हें दोबारा नहीं बुलाया जाए। यह पता चला है कि मुझे fragment.setRetainInstance (सत्य) को कॉल करना है अन्यथा स्क्रीन ऑन होने पर ऑनक्रिएट () और ऑनक्रिएट व्यू () दोनों को फिर से कॉल किया जाता है।
लानत सब्जियां

OnCreateView () में, क्या दृश्य पदानुक्रम तक पहुंच सुरक्षित है?
कोड़ी

@ काडी का मानना ​​है कि - दृश्य पदानुक्रम तक पहुंचना इसका सटीक उद्देश्य है onCreateView
फारबोड सलामत-जेडे

1
हालाँकि, गतिविधि का onCreate () onActivityCreated () तक समाप्त नहीं हो सकता है? दृश्य पदानुक्रम तक पहुँचने के लिए onCreateView में दुर्घटना का कोई भी मौका है? मुझे यकीन नहीं है कि onCreateView () / onActivityCreated ()
Cody

1
ध्यान देने वाली एक बात (कम से कम AppCompatActivity के साथ) यह है कि जब गतिविधि को फिर से बनाया जाता है (जैसे कि कम से कम होने और मारे जाने के बाद) onCreate () के अंशों को onCreate () और सुपर .oncreate () गतिविधियों से पहले बुलाया जाएगा। यह एक समस्या हो सकती है यदि आप डैगर की तरह कुछ का उपयोग कर रहे हैं और इंजेक्शन वाली पैरेंट गतिविधि में कुछ एक्सेस करने की आवश्यकता है। इसका एक समाधान कोड को onActivityCreated () में रखना है जिसे हमेशा onCreate कहा जाता है () कहा जाता है।
निकोलस

144

संक्षिप्त, सचित्र उत्तर की तलाश में किसी के लिए:

यहां छवि विवरण दर्ज करें https://hanaskuliah.wordpress.com/2015/12/07/android-5-development-part-6-fragment/


तथा,

यहां छवि विवरण दर्ज करें


21
माना। कॉमिक सैंस इस तरह की चीजों के लिए आवश्यक है
कार्तिक चुग

1
यह पहली बार है जब मुझे एक ही चित्र में 3 अलग-अलग फोंट दिखाई दे रहे हैं, और किसी तरह मेरा जीवन अब पूरा हो गया है।
गिल सैंड

जब वास्तव में एक टुकड़ा फिर से शुरू हो सकता है?
सौरभ

1
एक बार जब यह प्रक्रिया मृत हो जाती है, तो टुकड़ा फिर से कैसे नहीं आता है? AFAIK, केवल एक टास्क स्टेट एक बंडल के रूप में संरक्षित है और इसे फिर से बनाया गया है ताकि ऐप को फिर से अग्रभूमि में लाया जा सके।
stdout

6

onActivityCreated () - पदावनत

onActivityCreated()अब टुकड़े संस्करण 1.3.0-Alpha02 के रूप में पदावनत किया गया है

OnActivityCreated () विधि अब पदावनत हो गई है। खंड के दृश्य को छूने वाला कोड onViewCreated () में होना चाहिए (जिसे onActivityCreated ()) से तुरंत पहले कहा जाता है और अन्य प्रारंभ कोड onCreate () में होना चाहिए। कॉलबैक प्राप्त करने के लिए विशेष रूप से जब गतिविधि का ऑनक्रिएट () पूरा हो गया है, तो LifeCycleObserver को onAttach () में गतिविधि के जीवनचक्र पर पंजीकृत किया जाना चाहिए, और onCreate () कॉलबैक प्राप्त होने पर हटा दिया जाना चाहिए।

विस्तृत जानकारी यहाँ मिल सकती है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.