2010-08-26 13 views
7

मेरे पास एक ऐसा एप्लिकेशन है जो एक गतिविधि से दूसरी गतिविधि में संक्रमण पर कुछ कस्टम एनिमेशन करने के लिए ओवरराइड प्रस्तुत करने का उपयोग करता है। यह एंड्रॉइड 2.0 में उपलब्ध कराया गया था, लेकिन मैं एंड्रॉइड 1.6 पर एप्लिकेशन को काम करना चाहता हूं। मैंने सोचा कि अगर मैंने अभी एंड्रॉइड.ओएस.बिल्ड.वर्सन.डीकेसीटीटी> android.os.Build.VERSION_CODES.DONUT की जांच की है, और यदि नहीं, तो ओवरराइड पार्टिंग ट्रांसलेशन नहीं करें। VFY: आभासी विधि 346 को हल करने में असमर्थ: ../../Login: overridePendingTransition (द्वितीय) वीVerifyError, या overridePendingTransition का उपयोग कर?

यह संभव नहीं है

हालांकि, मैं एक VerifyError है, जो मुझे लगता है इस के कारण होता है मिल एसडीके संस्करण के आधार पर सशर्त रूप से नई कार्यक्षमता का उपयोग करने के लिए?

उत्तर

15

क्या एसडीके संस्करण के आधार पर सशर्त रूप से नई कार्यक्षमता का उपयोग करना संभव नहीं है?

हाँ, यह है।

मुझे लगता है कि अपने कोड इस तरह दिखता है लगता जा रहा हूँ:

if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) { 
    overridePendingTransition(...); 
} 

अगर मैं सही हूँ, तो वह काम नहीं करेगा। जब कक्षा लोड हो जाती है तो VM overridePendingTransition() खोजने का प्रयास करेगा, न कि if() कथन निष्पादित किया जाएगा।

इसके बजाय, आप यह करने के लिए सक्षम होना चाहिए:

if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) { 
    SomeClassDedicatedToThisOperation.overridePendingTransition(this, ...); 
} 

जहां SomeClassDedicatedToThisOperation में overridePendingTransition() के कार्यान्वयन सिर्फ आपूर्ति की Activity पर overridePendingTransition() कहता है।

तो SomeClassDedicatedToThisOperation रूप में लंबे समय कहीं और प्रयोग किया जाता है नहीं, अपने वर्ग जब तक आप अपने if() परीक्षण के अंदर हैं लोड नहीं किया जा जाएगा, और आप VerifyError नहीं मिलेगा।

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