Właśnie zakończyłem dostosowywanie jednej z moich aplikacji do nowych bibliotek obsługi aplikacji v22.1.1 &, zobacz here i here, aby uzyskać więcej szczegółów. Kiedy zrobiłem kilka testów, coś było wyłączone z ActionModes używam.Tryb onPrepareActionMode nie był wywoływany podczas tworzenia ActionMode
Po uruchomieniu ActionMode użyciu startSupportActionMode()
rozmowy - to nie ma znaczenia, jeśli używasz już nieaktualna ActionBarActivity klasę bazową lub nową klasę AppCompatActivity podstawa - onPrepareActionMode()
nie jest wywoływana.
W poprzednich wersjach, w tym v21.0.3 & v22.0.0, onPrepareActionMode()
został wywołany automatycznie, gdy tryb działania został początkowo utworzony przy użyciu startSupportActionMode()
.
Testowałem to na urządzeniach 2.2, 4.4.2 i 5.0, więc wygląda na to, że nie zależy to od wersji.
Czy ktoś wie, czy jest to zamierzone zachowanie, które zostało wprowadzone w wersji 22.1.1, czy błąd?
Znalazłem issue, ale nie ma zbyt dużo informacji zwrotnych tutaj ...
Edycja 11 maja 2015:
Jak wspomniano w Android issue tracker 159527, kwestia ta nie tylko wpływa na v22.1 .x aplikacji appcompat i biblioteki wsparcia, ale także implementacja systemu Android 5.1.
dwa możliwe rozwiązania tymczasowe w tej chwili, ogólny One:
@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;
}
i 'szybkie i brudne' jeden (jeśli instancję swoje ActionMode):
final ActionMode actionMode = startSupportActionMode(new MyActionMode());
if(actionMode != null) {
actionMode.invalidate();
}
Jeśli don” t użyj appcompat (ActionBarActivity
/AppCompatActivity
) musisz zastąpić startSupportActionMode()
przez startActionMode()
.
Niestety, wciąż nie jest jasne, czy jest to zamierzone nowe zachowanie, czy błąd. Według API doc jest to błąd/regresja, ale kto wie ...
Zgadzam się z Państwem - to błąd. Po prostu wpadłem na to i spędziłem trochę czasu na debugowaniu, aby odkryć, że onPrepare ... nie jest już wywoływany. W moim przypadku, myślę, że będzie działać, aby po prostu przenieść cały mój kod onPrepare ... do onCreate ... –
@darksaga: powinieneś przekonwertować swoją edycję na odpowiedź i ją zaakceptować :) –