Я только что закончил адаптировать одно из своих приложений к новым библиотекам поддержки и совместимости приложений v22.1.1, подробнее см. Здесь и здесь . Когда я провел некоторое тестирование, что-то было не так с режимами действий, которые я использую.
Когда вы запускаете ActionMode с помощью startSupportActionMode()
вызова - не имеет значения, используете ли вы устаревший базовый класс ActionBarActivity или новый базовый класс AppCompatActivity - onPrepareActionMode()
не вызывается.
В предыдущих версиях, включая v21.0.3 и v22.0.0, onPrepareActionMode()
вызывался автоматически, когда ActionMode изначально создавался с использованием startSupportActionMode()
.
Я тестировал его на устройствах 2.2, 4.4.2 и 5.0, поэтому, похоже, он не зависит от версии.
Кто-нибудь знает, если это предполагаемое поведение, которое было введено в v22.1.1, или ошибка?
Я обнаружил эту проблему , но здесь не так много отзывов ...
Изменить 11 мая 2015 г .:
Как упоминалось в системе отслеживания проблем Android 159527 , эта проблема затрагивает не только v22.1.x appcompat и библиотеки поддержки, но и реализацию Android 5.1.
На данный момент есть два возможных временных решения, одно общее:
@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 , это ошибка / регресс, но кто знает ...