2010-08-26 12 views
7

Mam aplikacji, która używa overridePendingTransition do wykonywania niestandardowych animacji po przejściu z jednego działania na drugie. Zostało to udostępnione w systemie Android 2.0, ale chcę, aby aplikacja działała na systemie Android 1.6. Pomyślałem, że jeśli po prostu sprawdziłem, że android.os.Build.VERSION.SDK_INT> android.os.Build.VERSION_CODES.DONUT, a jeśli nie, nie rób overridePendingTransition.VerifyError lub użycie overridePendingTransition przy zachowaniu zgodności?

Jednak uzyskać VerifyError, które zakładam, że jest to spowodowane przez: VFY: Nie można rozwiązać metodą wirtualną 346: ../../Login: overridePendingTransition (ii) przeciwko

Czy nie jest możliwe korzystać z nowszych funkcji warunkowo w oparciu o wersję SDK?

Odpowiedz

15

Czy nie jest możliwe korzystanie z nowszych funkcji warunkowo w oparciu o wersję SDK?

Tak, jest.

jadę odgadnąć, że Twój kod wygląda następująco:

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

Jeśli mam rację, to nie będzie działać. Maszyna wirtualna spróbuje znaleźć overridePendingTransition(), gdy klasa zostanie załadowana, a nie gdy zostanie wykonana ta instrukcja if().

Zamiast tego, należy być w stanie to zrobić:

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

gdzie realizacja overridePendingTransition() w SomeClassDedicatedToThisOperation po prostu wywołuje overridePendingTransition() na dołączonej Activity.

Dopóki SomeClassDedicatedToThisOperation nie zostanie użyty nigdzie indziej, jego klasa nie zostanie załadowana, dopóki nie znajdzie się w teście if(), a użytkownik nie otrzyma VerifyError.

Powiązane problemy