साल पहले, जब मैंने को onActivityResult()
कॉलबैक के अंदर करने की कोशिश की तो मैंने अपने ऐप्स में से एक में एक समस्या में भाग लिया। चारों ओर Googling, मैं this question and answer है, जो कहते हैं किक्या एक्टिविटी रिसैट() पर अंदर एक फ्रैगमेंट ट्रांज़ेक्शन को सुरक्षित करना सुरक्षित है?
समय है कि
onActivityResult()
कहा जाता है पर पाया, गतिविधि/टुकड़ा का राज्य अभी तक बहाल हो सकता है नहीं किया गया है, और इसलिए किसी भी लेनदेन है कि इस समय के दौरान होता है एक परिणाम के रूप खो जाएगा ।
मैं अपने ऐप के लिए एक ही जवाब में सुझाए गए समाधान को अपनाने के लिए घायल हो गया, और जीवन अच्छा था। हालांकि, हालिया प्रयोग से पता चलता है कि शायद चीजें बदल गई हैं, और onActivityResult()
के अंदर से FragmentTransaction
को सुरक्षित करने के लिए सुरक्षित रहें।
नोट::
The documentation for (support v4)
FragmentManager.beginTransaction()
के रूप में लेनदेन के लिए सुरक्षित खिड़की को परिभाषित करता है एक टुकड़ा लेनदेन केवल बनाया जा सकता है/एक गतिविधि अपने राज्य को बचाने के लिए पहले प्रतिबद्ध है। आप के बादFragmentActivity.onSaveInstanceState()
(और करने से पहले एक निम्नलिखितFragmentActivity.onStart
याFragmentActivity.onResume()
आपको एक त्रुटि मिल जाएगा एक सौदे के लिए प्रतिबद्ध करने का प्रयास करें।
पढ़ना the documentation for onActivityResult()
, मैं देख
आप
onResume()
से ठीक पहले इस कॉल आएगी जब आपकी गतिविधि फिर से शुरू हो रही है।
इससे मुझे विश्वास होता है कि onActivityResult()
में इन लेन-देन को निष्पादित करना सुरक्षित होना चाहिए onStart()
मुझे पहले ही सुरक्षित विंडो के अंदर रखकर बुलाया जाएगा।
मैंने इसे जांचने के लिए एक ऐप बनाया है, और मैं सफलतापूर्वक संवाद खंड देख रहा हूं जो मैं onActivityResult()
के अंदर बना और प्रतिबद्ध करता हूं। मेरे पास एक ही ऐप गतिविधि लाइफसाइक्ल कॉलबैक को लॉग करता था, इसलिए मैं उनके ऑर्डर का निरीक्षण कर सकता था, और मैं onStart()
, फिर onRestoreInstanceState()
, और फिर onActivityResult()
हर बार देखता हूं।
क्या मुझे कुछ याद आ रही है? या ढांचा बदल गया है और onActivityResult()
अब खंड लेनदेन के लिए एक सुरक्षित जगह होने की गारंटी है? क्या यह व्यवहार एपीआई स्तर से भिन्न होता है?
मुझे another question and answer मिला जो मुझे प्रलेखन को उसी तरह पढ़ता प्रतीत होता है, लेकिन दोनों एक वर्ष से अधिक पुराने हैं और न तो विशेष रूप से लेनदेन के लिए एक सुरक्षित स्थान के रूप में onActivityResult()
को संदर्भित करते हैं।
http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html – elmorabea
@elmorabea पर एक नज़र डालें कि ब्लॉग पोस्ट उन सामग्रियों में से एक है जब मैंने पहली बार पाया था इस मुद्दे। हालांकि, जैसा कि नीचे एज़िज़बेकियन के उत्तर द्वारा दिखाया गया है, ऐसा लगता है कि यह अब फ्रैगमेंट ट्रांस्सेक्शन को सुरक्षित करने के लिए सुरक्षित विंडो का सटीक स्पष्टीकरण नहीं है। –