2012-03-08 20 views
17

onActivityResult(int requestCode, int resultCode, Intent data) विधि में भाषण मान्यता के परिणाम पढ़े जा सकते हैं, जैसा कि this example में दिखाया गया है। यह विधि कक्षा Activity में एक ही विधि को ओवरराइड करती है: सुपरक्लास विधि को कॉल क्यों पहला कथन नहीं है?क्या सुपरक्लास विधि को कॉल करना पहला बयान होना चाहिए?

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { 
     // Fill the list view with the strings the recognizer thought it could have heard 
     // ... 
    } 

    super.onActivityResult(requestCode, resultCode, data); 
} 

उत्तर

64

तरीके आप ओवरराइड कि घटक सृजन (onCreate(), onStart(), onResume(), आदि) का हिस्सा हैं, तो आप चाहिए पहला विवरण सुपर क्लास के लिए श्रृंखला यह सुनिश्चित करने के लिए कि एंड्रॉइड के पास ऐसा काम करने से पहले कुछ ऐसा करने का प्रयास करने से पहले अपने काम करने का मौका है।

तरीके आप ओवरराइड कि घटक विनाश (onPause(), onStop(), onDestroy(), आदि) का हिस्सा हैं, तो आप आखिरी बात के रूप में सुपर क्लास करने के लिए पहली और श्रृंखला अपने काम करना चाहिए। इस तरह, यदि एंड्रॉइड कुछ ऐसा साफ कर देता है जिस पर आपका काम निर्भर करता है, तो आप पहले अपना काम करेंगे।

तरीके कि void (onCreateOptionsMenu(), आदि) के अलावा कुछ लौटने के लिए, कभी कभी आप बदले बयान में सुपर क्लास के लिए चेन, यह सोचते हैं कि आप विशेष रूप से कुछ एक विशेष वापसी मान के लिए मजबूर करने की जरूरत है कि नहीं कर रहे हैं।

अन्य सभी - जैसे onActivityResult() - पूरी तरह से आप पर निर्भर है। मैं सुपरक्लास को पहली चीज़ के रूप में चेन करता हूं, लेकिन जब तक आप समस्याओं में भाग नहीं लेते हैं, तो बाद में चेनिंग ठीक होनी चाहिए।

+10

लेकिन क्यों आधिकारिक डॉक्टर कहते हैं: "हमेशा सुपरक्लास विधि को कॉल करें" पर रोकें()? http://developer.android.com/training/basics/activity-lifecycle/pausing.html#Pause – petrnohejl

+1

भयानक .. धन्यवाद :) – stinepike

+6

@petrnohejl क्योंकि दस्तावेज़ खराब हैं। – dcow

4

क्योंकि आप आमतौर पर कक्षा पदानुक्रम को नियंत्रित करने से पहले अपने ओवरराइड गतिविधि के लिए अद्वितीय घटनाओं को निष्पादित करना चाहते हैं। ध्यान दें कि यह हमेशा मामला नहीं है। कभी-कभी आपको पहले कॉल करना चाहिए जैसे आपके ऐप को प्रारंभ होने पर होने वाली कॉलबैक में, और हो सकता है कि आप उन्हें उन ईवेंट के लिए आखिरी बार रखना चाहें जो आपके ऐप को नष्ट कर देते हैं ताकि आप पहले साफ कर सकें।

सामान्य रूप से इससे कोई फर्क नहीं पड़ता और एसडीके में इसका उल्लेख किया जाएगा - मैंने इसमें भाग लिया है एसकेडी में कुछ स्थानों का उल्लेख किया है (मुझे संवाद के बारे में दस्तावेज़ीकरण पर लगता है) लेकिन मैं ' टी याद नहीं है कि यह किस पृष्ठ/अनुभाग पर है।

वहाँ विषय यहाँ पर कुछ अधिक विस्तृत चर्चा है: http://groups.google.com/group/android-developers/browse_thread/thread/9ddb2b06c21c8457

संबंधित मुद्दे