我剛剛完成將我的一個應用程序調整到新的v22.1.1支持& appcompat庫,請參閱here和here以獲取更多詳細信息。當我做了一些測試時,我用的是ActionModes。onPrepareActionMode創建ActionMode時未調用
當您啓動ActionMode使用startSupportActionMode()
呼叫 - onPrepareActionMode()
不會被調用 - 如果你用現在已經過時ActionBarActivity基類或新AppCompatActivity基類也沒關係。
在以前的版本中,包括v21.0.3 & v22.0.0,onPrepareActionMode()
被自動調用,當ActionMode最初是使用startSupportActionMode()
創建的。
我在2.2,4.0.2和5.0的設備上測試過它,所以它似乎不是版本相關的。
有誰知道,如果這是意向性行爲,那是在v22.1.1中引入的,或者是一個錯誤?
我發現這個issue,但有沒有很多在這裏的反饋...
編輯2015年5月11日:
正如Android issue tracker 159527提到的,這個問題不僅影響v22.1 .x的appcompat和支持庫,還有5.1的Android實現。此刻
兩個可能的臨時解決方案,一般的一個:
@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();
}
如果你不」 t使用appcompat(ActionBarActivity
/AppCompatActivity
)您需要將startSupportActionMode()
替換爲startActionMode()
。
不幸的是,目前還不清楚這是否意味着新的行爲或錯誤。根據API doc這是一個錯誤/迴歸,但誰知道...
我同意你的看法 - 這是一個錯誤。我只是碰到了它,並花了一些時間只有調試發現,onPrepare ......不叫了。在我的情況下,我認爲它會將所有onPrepare ...代碼移植到onCreate ... –
@darksaga:您應該將您的編輯轉換爲答案並接受它:) –