VerifyError или использование overridePendingTransition при сохранении совместимости?

У меня есть приложение, которое использует overridePendingTransition для создания некоторых пользовательских анимаций при переходе от одного действия к другому. Это стало доступно в Android 2.0, но я хочу, чтобы приложение работало на Android 1.6. Я понял, если я только что проверил, что android.os.Build.VERSION. VFY: невозможно разрешить виртуальный метод 346: ../../Login: overridePendingTransition (II) V

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

7
задан AmITheRWord 26 August 2010 в 11:38
поделиться

1 ответ

Возможно ли использовать новые функции на основе версии 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() на поставляется Активность.

Пока SomeClassDedicatedToThisOperation больше нигде не используется, его класс не будет загружен, пока вы не окажетесь внутри теста if(), и вы не получите Верифиеррор.

15
ответ дан 6 December 2019 в 13:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: