2017-12-14 89 views
7

एंड्रॉइड फ्रैगमेंट में startActivityForResult() बनाम getActivity().startActivityForResult() के बीच अंतर क्या है? और Fragment में बुलाए जाने पर onActivityForResult() में व्यवहार अंतर क्या है?startActivityForResult() बनाम getActivity()। AndroidAagivityForResult() एंड्रॉइड फ्रैगमेंट

+0

https://developer.android.com/reference/android/app/Activity.html#onActivityResult(int, पूर्णांक, android.content.Intent) और https://developer.android.com/training/basics/ इरादों/परिणाम.html –

+0

क्या आप नहीं जानते कि एंड्रॉइड विकास के लिए एक दस्तावेज है? –

उत्तर

2

startActivityForResult() से इसे संभाल चाहिए fragment के onActivityForResult()

getActivity().startActivityForResult() से इसे संभाल चाहिए activity के onActivityForResult()

मूल रूप से :

आप एक fragment पर हैं और आप fragment पर परिणाम को संभालना चाहते हैं, onActivityForResult() का उपयोग करें, ओथ आप टुकड़ा की activity से इसे संभाल करना चाहते हैं rwise, का उपयोग getActivity.startActivityForResult()

1

हम गतिविधि के अंदर startActivityForResult() और फ्रैगमेंट के अंदर getActivity().startActivityForResult() का उपयोग कर सकते हैं।

इंशॉर्ट, गतिविधि का संदर्भ प्राप्त करने के लिए हम getActiviy() के साथ आगे बढ़ रहे हैं।

इसके बजाय, हम विशेष टुकड़ा के onActivityResult() के रूप में नीचे Actiivty .:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    for (Fragment fragment : getChildFragmentManager().getFragments()) { 
     fragment.onActivityResult(requestCode, resultCode, data); 
    } 
} 

से अगर हम तो अधिक जानकारी के लिए कहते हैं,, कॉल कर सकते हैं

तो आप अपने टुकड़ा से startActivityForResult() कॉल करेंगे अनुरोध कोड को उस गतिविधि द्वारा बदला जाएगा जो टुकड़े का मालिक है।

तो, आप अपने गतिविधि में सही resultCode प्राप्त करना चाहते हैं तो आप नीचे के रूप में की कोशिश कर सकते हैं:

प्रयोग न करें: (जैसे मामले में):

startActivityForResult(intent, 1); 

उपयोग:

getActivity().startActivityForResult(intent, 1); 

उम्मीद है कि यह मदद करता है ..!

+0

असल में मैंने 'getActivity()' का उपयोग किये बिना खंड में 'startActivityForResult() 'का उपयोग किया। यही कारण है कि मैं व्यवहार मतभेद पूछता हूं। –

+1

देखें @ j.elmer इसमें कोई अंतर नहीं है। लेकिन, थोड़ा सा अंतर यह है कि हम गतिविधि के संदर्भ प्राप्त करने के लिए getActivity()। StartActivityForResult() केवल खंड में ही उपयोग कर सकते हैं। –

+0

फ्रैगमेंट में एक अलग 'startActivityForResult' विधि का पूरा बिंदु गतिविधि की onActivityResult में सभी टुकड़ों को पार करने की आवश्यकता से बचने के लिए है। यह करने के लिए बिल्कुल गलत बात है। – ianhanniballake

0

कोई अंतर बिल्कुल ... लेकिन थोड़ा सा अंतर getActivity() है। startActivityForResult() केवल एक टुकड़ा से कॉल कर सकते हैं :)

2

प्रारंभ एक्टिविटीफॉररल्ट खंड कॉल प्रारंभिक गतिविधि ForResult इसकी कंटेनर गतिविधि के। तो फ्रैगमेंट के लिए: -

कॉल प्रारंभ करें सक्रियताफॉररेट (इराद, int) खंड की गतिविधि से।

जब आप टुकड़ा सीधे कुछ कुछ परिवर्तन अनुरोध पर बनाया जा सकता है में उपयोग जबकि code.And आप, onActivityresult() में संशोधित हो जाएगी अनुरोध कोड कारण मैं हाल ही में संशोधित अनुरोध कोड के साथ कुछ समस्या का सामना करना पड़ा है। आप This Thread पर एक नज़र डाल सकते हैं।

0

आपको Activity के संदर्भ में कॉल करना है, क्योंकि startActivityForResult(Intent intent, int requestCode)Activity में निर्दिष्ट विधि है।

इसलिए, यदि आप YourActivity से कहते हैं, यह पहले से ही की तरह Activity के संदर्भ में है:

YourActivity extends AppCompatActivity (which is subclass of `Activity`) 

लेकिन अगर आप यह YourFragment से बुला रहे हैं आप Activity संदर्भ निर्दिष्ट करने के लिए, इस मामले में हो जाएगा जो की जरूरत है गतिविधि YourFragment; इसलिए हम getActivity() का उपयोग करते हैं और फिर startActivityForResult()

0

"startActivityForResult()" गतिविधि कक्षाओं पर काम करता है। जब आप गतिविधि कक्षा में हैं, तो आप सीधे इस विधि का उपयोग कर सकते हैं। जब आप खंड में होते हैं, क्योंकि विभाजन गतिविधि पर बनाता है, तो आपको पहले उस गतिविधि को प्राप्त करना चाहिए जो उस पर आधारित टुकड़ा है। का अर्थ है:

//in fragment class: 
Activity activity = this.getActivity(); 

अब आप गतिविधि है और मैंने कहा, आप "startActivityForResult()" का उपयोग कर सकते गतिविधि है कि आप टुकड़ा से प्राप्त पर।

activity.startActivityForResult(); 

आशा मदद करता है।

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