2010-07-28 12 views
88

मैं अपने कार्यकर्ता गतिविधि से Activity (PreferenceActivity के वंशज) शुरू इस प्रकार है:onActivityResult() कहा जाता है समय से पहले ही

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 1458) 
     loadInfo(); 
} 

void showSettingsDialog() 
{ 
    startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458); 
} 

MyConfigure वर्ग किसी भी setResult() कॉल नहीं है। वास्तव में, MyConfigure कक्षा में OnCreate() को छोड़कर कोई कोड नहीं है, जहां यह addPreferencesFromResource का उपयोग करके वरीयताओं को लोड करता है।

अब onActivityResult1458 के साथ समय-समय पर MyConfigure गतिविधि चलाने के बाद कहा जाता है। 1.6 और 2.1 अनुकरणकर्ताओं के साथ-साथ 2.1 डिवाइस पर परीक्षण किया गया। क्या setResult() पर PreferenceActivity में कहीं दफन किया गया है? या यह समयपूर्व कॉल कैसे समझाया जा सकता है?

+1

एक गतिविधि setResults() को समाप्त हो नहीं है, यह समाप्त हो जाती है खत्म पर()। क्या आप अपनी MyConfigure गतिविधि की ऑनक्रेट विधि दिखा सकते हैं? –

+0

ठीक है, यह नहीं है। हालांकि, कुछ समय से पहले setResult() को कॉल करता है और मैं सोच रहा हूं, यह क्या है। onCreate का कोड तुच्छ है: सार्वजनिक वर्ग MyConfigure फैली PreferenceActivity { \t @Override \t संरक्षित शून्य OnCreate (बंडल savedInstanceState) { सुपर।OnCreate (savedInstanceState); addPreferencesFromResource (R.xml.preferences); } } –

+0

आप कैसे सोचते हैं कि setResult कहा जाता है? – RoflcoptrException

उत्तर

246

यह singleTop को लांच मोड बदलकर तय हो गई है: (?)

<activity 
     android:name=".MainActivity" 
     android:launchMode="singleTop"> 

एक बग/सुविधा एंड्रॉयड, में जो तुरंत परिणाम Activity के लिए (जो अभी तक सेट नहीं किया गया है) की रिपोर्ट नहीं है, के रूप में घोषित singleTask (इस तथ्य के बावजूद कि गतिविधि चलती रहती है)। अगर हम singleTask से singleTop तक मूल गतिविधि के launchMode बदलते हैं, तो सबकुछ अपेक्षित काम करता है - गतिविधि समाप्त होने के बाद ही परिणाम की सूचना दी जाती है। हालांकि इस व्यवहार में कुछ स्पष्टीकरण है (केवल एक singleTask गतिविधि मौजूद हो सकती है और इसके लिए कई वेटर्स भी हो सकते हैं), यह अभी भी मेरे लिए तार्किक प्रतिबंध नहीं है।

+0

ओह हाँ, धन्यवाद, कमाल का जवाब! –

+2

यह एक बग लगता है! ^^ बहुत अजीब व्यवहार! –

+7

यदि गतिविधि में सिंगल टास्क लॉन्च मोड है तो उसे एक्टिविटी रिसेट का उपयोग करके उप-गतिविधि से परिणाम प्राप्त करने की आवश्यकता नहीं है। उप-गतिविधियां केवल कॉल खत्म करें() और फिर डेटा उद्देश्य के साथ मुख्य गतिविधि शुरू करें। मुख्य गतिविधि में आपको न्यूइन्टेंट विधि और प्रक्रिया प्राप्त करने की प्रक्रिया को ओवरराइड करना होगा। – Nik

-1

फिर से माया की टिप्पणी में, setResult() आपकी समस्या से कोई लेना देना नहीं है। किसी कारण से, MyConfigure कक्षा स्वयं समाप्त होती है और जब यह होता है PreferenceActivity बस मानता है कि MyConfigure से परिणाम हो सकता है क्योंकि आपने कोड लिखा है।

यह भी होता है जब आप के लिए मजबूर वापस किसी भी गतिविधि thats startActivityForResult() के साथ शुरू किया ...

तो, मुझे लगता है कि यह बेहतर है जिनकी वजह से आपके MyConfigure वर्ग जबरन समाप्त हो गया है पर ध्यान दें।

+0

MyConfigure क्लास समाप्त नहीं होता है, आपके अनुमान गलत हैं, क्षमा करें। अगर ऐसा होता है, तो कोई सवाल नहीं होगा –

5

मैंने अपनी गतिविधि से अपने सभी कस्टम "एंड्रॉइड: लॉन्चमोड" को हटा दिया और सबकुछ एक आकर्षण की तरह काम करता था। यह एक अच्छा विचार नहीं है जब आप नहीं जानते कि एंड्रॉइड क्या समझ रहा है ... एंड्रॉइड इस तरह से थोड़ा मुश्किल है।

+0

यह मेरे लिए भी काम करता है। धन्यवाद! – thiagolsilva

15

fragment.startActivityForResult(intent, 0); पर कॉल करने से पहले intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); को हटाने के बाद मैंने अपनी समस्या हल की।

+0

धन्यवाद! यह मेरी समस्या हल हो गई। क्या इस जगह के लिए कोई स्पष्टीकरण है? –

+0

धन्यवाद! यह मेरी समस्या हल हो गई। –

1

यह मेरे साथ हुआ जब इरादे Intent.FLAG_RECEIVER_FOREGROUND ध्वज सेट था।

(हाँ, कि झंडा नहीं गतिविधि से संबंधित है, लेकिन मैं a different problem करने के लिए एक बन्दूक समाधान का हिस्सा के रूप में मेरे सभी उद्देश्यों पर था।)

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