Ich habe gerade eine meiner Apps an die neue v22.1.1-Unterstützung & appcompat libraries angepasst, siehe here und here für weitere Details. Als ich etwas getestet habe, war etwas los mit der ActionModes, die ich benutze.onPrepareActionMode nicht aufgerufen beim Erstellen von ActionMode
Wenn Sie beginnen, ein ActionMode einen startSupportActionMode()
Anruf mit - es ist nicht, ob Sie die jetzt veraltet ActionBarActivity Basisklasse oder die neue AppCompatActivity Basisklasse verwenden, egal - onPrepareActionMode()
heißt nicht werden.
In früheren Versionen, einschließlich v21.0.3 & v22.0.0 wurde onPrepareActionMode()
automatisch aufgerufen, wenn die ActionMode zunächst mit startSupportActionMode()
erstellt wurde.
Ich habe es auf einem 2.2, 4.4.2 und 5.0 Gerät getestet, so dass es nicht versionsabhängig zu sein scheint.
Weiß jemand, ob das beabsichtigte Verhalten, das in v22.1.1 eingeführt wurde, oder ein Fehler ist?
fand ich diese issue, aber es gibt nicht viel Feedback hier ...
Bearbeiten 2015 11. Mai:
Wie in den Android issue tracker 159527 erwähnt, dieses Problem betrifft nicht nur die v22.1 .x von appcompat und der Support-Bibliothek, aber auch die 5.1 Android-Implementierung.
Zwei mögliche temporäre Lösungen im Moment, ein allgemeiner Art:
@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;
}
und ein 'quick and dirty' ein (wenn Sie instanziiert Ihre ActionMode):
final ActionMode actionMode = startSupportActionMode(new MyActionMode());
if(actionMode != null) {
actionMode.invalidate();
}
Wenn Sie don‘ t verwenden Sie appcompat (ActionBarActivity
/AppCompatActivity
) müssen Sie startSupportActionMode()
durch startActionMode()
ersetzen.
Leider ist es immer noch nicht klar, ob dies ein neues Verhalten oder ein Fehler ist. Laut der API doc ist es ein Bug/Regression, aber wer weiß ...
Ich stimme dir zu - das ist ein Fehler. Ich bin einfach hineingelaufen und habe etwas Zeit mit dem Debuggen verbracht, nur um festzustellen, dass onPrepare ... nicht mehr aufgerufen wird. In meinem Fall, ich denke, es wird funktionieren, um alle meine onPrepare ... Code zu onCreate ... –
@darksaga Port: Sie sollten Ihre Bearbeitung in eine Antwort konvertieren und akzeptieren :) –