2010-08-26 6 views
7

J'ai une application qui utilise overridePendingTransition pour faire des animations personnalisées lors de la transition d'une activité à l'autre. Cela a été rendu disponible dans Android 2.0, mais je veux que l'application fonctionne sur Android 1.6. Je me suis dit si je viens de vérifier que android.os.Build.VERSION.SDK_INT> android.os.Build.VERSION_CODES.DONUT, et si ce n'est pas le cas, ne faites pas le overridePendingTransition.VerifyError, ou en utilisant overridePendingTransition tout en maintenant la compatibilité?

Cependant, je reçois un VerifyError, que je suppose est causée par ceci: VFY: Impossible de résoudre la méthode virtuelle 346: ../../Login: overridePendingTransition (II) V

est-il pas possible utiliser des fonctionnalités plus récentes en fonction de la version du SDK?

Répondre

15

N'est-il pas possible d'utiliser des fonctionnalités plus récentes en fonction de la version du SDK?

Oui, c'est.

Je vais deviner que votre code ressemble à ceci:

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

Si je ne me trompe pas, alors cela ne fonctionnera pas. La machine virtuelle tentera de trouver overridePendingTransition() lorsque la classe est chargée, et non lorsque cette instruction if() est exécutée.

Au lieu de cela, vous devriez être en mesure de le faire:

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

où la mise en œuvre de overridePendingTransition() dans SomeClassDedicatedToThisOperation appelle simplement overridePendingTransition() fourni sur le Activity.

Tant que SomeClassDedicatedToThisOperation n'est utilisé nulle part ailleurs, sa classe ne sera pas chargée tant que vous ne serez pas dans votre test if(), et vous n'obtiendrez pas le VerifyError.

Questions connexes