Я только что закончил настройку одного из моих приложений на новые библиотеки поддержки v32.1.1 и библиотеки appcompat, см. здесь и здесь для получения более подробной информации. Когда я провел какое-то тестирование, что-то было отключено с помощью ActionModes, который я использую.
Когда вы начинаете ActionMode с помощью вызова startSupportActionMode()
- не имеет значения, используете ли вы теперь устаревшие ActionBarActivity или новый AppCompatActivity базовый класс - onPrepareActionMode()
не вызывается.
В предыдущих версиях, включая v21.0.3 и v22.0.0, onPrepareActionMode()
вызывается автоматически, когда ActionMode был первоначально создан с помощью startSupportActionMode()
.
Я тестировал его на устройствах 2.2, 4.4.2 и 5.0, поэтому он не зависит от версии.
Кто-нибудь знает, если это предполагаемое поведение, которое было введено в v22.1.1, или ошибка?
Я нашел этот issue, но здесь не так много отзывов...
Изменить 11 мая 2015 года:
Как упоминалось в отслеживании проблем Android 159527, эта проблема не только затрагивает v22.1.x appcompat и библиотеку поддержки, но также и реализацию 5.1 Android.
В настоящее время возможны два возможных временных решения: общий:
@Override
public ActionMode startSupportActionMode(final ActionMode.Callback callback) {
// Fix for bug https://code.google.com/p/android/issues/detail?id=159527
final ActionMode mode = super.startSupportActionMode(callback);
if (mode != null) {
mode.invalidate();
}
return mode;
}
и "быстрый и грязный" (когда вы создаете экземпляр ActionMode):
final ActionMode actionMode = startSupportActionMode(new MyActionMode());
if(actionMode != null) {
actionMode.invalidate();
}
Если вы не используете appcompat (ActionBarActivity
/AppCompatActivity
), вам нужно заменить startSupportActionMode()
на startActionMode()
.
К сожалению, до сих пор неясно, связано ли это с новым поведением или ошибкой. Согласно API doc, это ошибка/регресс, но кто знает...