Właśnie skończyłem dostosowywać jedną z moich aplikacji do nowej obsługi i bibliotek appcompat w wersji 22.1.1. Więcej informacji znajdziesz tutaj i tutaj . Kiedy przeprowadzałem testy, coś było nie tak z ActionModes, których używam.
Gdy uruchamiasz ActionMode za pomocą startSupportActionMode()
wywołania - nie ma znaczenia, czy używasz obecnie przestarzałej klasy bazowej ActionBarActivity, czy nowej klasy bazowej AppCompatActivity - onPrepareActionMode()
nie jest wywoływana.
We wcześniejszych wersjach, w tym 21.0.3 i 22.0.0, onPrepareActionMode()
był wywoływany automatycznie, gdy tryb ActionMode był początkowo tworzony przy użyciu startSupportActionMode()
.
Przetestowałem to na urządzeniu 2.2, 4.4.2 i 5.0, więc wydaje się, ż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 lub błąd?
Znalazłem ten problem , ale nie ma tu wielu opinii ...
Edycja 11 maja 2015 r .:
Jak wspomniano w narzędziu do śledzenia problemów systemu Android 159527 , problem ten dotyczy nie tylko wersji 22.1.x programu appcompat i biblioteki obsługi, ale także implementacji systemu Android 5.1.
W tej chwili możliwe są dwa rozwiązania tymczasowe, jedno ogólne:
@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 `` szybki i brudny '' (podczas tworzenia instancji ActionMode):
final ActionMode actionMode = startSupportActionMode(new MyActionMode());
if(actionMode != null) {
actionMode.invalidate();
}
Jeśli nie używać AppCompat ( ActionBarActivity
/ AppCompatActivity
) trzeba wymienić startSupportActionMode()
z startActionMode()
.
Niestety nadal nie jest jasne, czy jest to zamierzone nowe zachowanie, czy błąd. Zgodnie z dokumentacją API jest to błąd / regresja, ale kto wie ...