Я щойно закінчив налаштовувати один із своїх додатків на нову бібліотеку підтримки & vcomponent v22.1.1, див. Тут і тут, щоб дізнатися більше. Коли я провів тестування, щось не було в режимах 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, або помилка?
Я знайшов цю проблему , але тут не так багато відгуків ...
Редагувати 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 , це помилка / регресія, але хто знає ...