VerifyError или использование overridePendingTransition при сохранении совместимости? - PullRequest
7 голосов
/ 26 августа 2010

У меня есть приложение, которое использует overridePendingTransition для выполнения некоторых пользовательских анимаций при переходе от одного действия к другому.Это было доступно в Android 2.0, но я хочу, чтобы приложение работало на Android 1.6.Я понял, если я только что проверил, что android.os.Build.VERSION.SDK_INT> android.os.Build.VERSION_CODES.DONUT, и если нет, то не делаю overridePendingTransition.

Однако я получаю VerifyError, что, как я полагаю, вызвано этим: VFY: невозможно разрешить виртуальный метод 346: ../../Login: overridePendingTransition (II) V

Не возможно использовать более новые функции, условно основанные на SDKверсия?

1 Ответ

15 голосов
/ 26 августа 2010

Разве невозможно использовать новые функции, условно основанные на версии SDK?

Да, это так.

Я собираюсь догадаться, что ваш код выглядиткак это:

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

Если я прав, то это не сработает.ВМ будет пытаться найти overridePendingTransition() при загрузке класса, а не при выполнении этого оператора if().

Вместо этого вы сможете сделать это:

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

где реализация overridePendingTransition() в SomeClassDedicatedToThisOperation просто вызывает overridePendingTransition() для предоставленного Activity.

До тех пор, пока SomeClassDedicatedToThisOperation не используется где-либо еще, его класс не будет загружен, пока вы невнутри вашего if() теста, и вы не получите VerifyError.

...