Acabo de terminar de ajustar una de mis aplicaciones a las nuevas bibliotecas de compatibilidad y compatibilidad con aplicaciones v22.1.1; consulte aquí y aquí para obtener más detalles. Cuando hice algunas pruebas, algo andaba mal con los ActionModes que estoy usando.
Cuando inicia un ActionMode usando una startSupportActionMode()
llamada, no importa si usa la clase base ActionBarActivity ahora obsoleta o la nueva clase base AppCompatActivity , onPrepareActionMode()
no se está llamando.
En versiones anteriores, incluidas las v21.0.3 y v22.0.0, onPrepareActionMode()
se llamaba automáticamente cuando ActionMode se creaba inicialmente con startSupportActionMode()
.
Lo probé en un dispositivo 2.2, 4.4.2 y 5.0, por lo que parece no depender de la versión.
¿Alguien sabe, si este es un comportamiento previsto, que se introdujo en la v22.1.1 o un error?
Encontré este problema , pero no hay muchos comentarios aquí ...
Edición 11 de mayo de 2015:
Como se menciona en el rastreador de problemas de Android 159527 , este problema no solo afecta a la versión 22.1.x de appcompat y la biblioteca de soporte, sino también a la implementación de Android 5.1.
Dos posibles soluciones temporales por el momento, una general:
@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;
}
y uno 'rápido y sucio' (cuando crea una instancia de su ActionMode):
final ActionMode actionMode = startSupportActionMode(new MyActionMode());
if(actionMode != null) {
actionMode.invalidate();
}
Si no usa appcompat ( ActionBarActivity
/ AppCompatActivity
), debe reemplazarlo startSupportActionMode()
con startActionMode()
.
Desafortunadamente, todavía no está claro si se trata de un nuevo comportamiento o un error. Según el documento de la API , es un error / regresión, pero quién sabe ...