我刚刚调整了我的一个应用程序到新的 v22.1.1支持和应用程序库,请参阅 给你和 给你了解更多细节。当我做一些测试时,我使用的 行动模式有些不对劲。
当您使用 startSupportActionMode()
调用启动 动作模式时-无论您使用现在已废弃的 活动基类还是新的 AppCompatActivity基类-onPrepareActionMode()
没有被调用。
在以前的版本(包括 v21.0.3和 v22.0.0)中,当最初使用 startSupportActionMode()
创建 ActionMode 时,会自动调用 onPrepareActionMode()
。
我在2.2、4.4.2和5.0设备上测试了它,所以它似乎不依赖于版本。
有没有人知道,如果这是在 v22.1.1中引入的预期行为,还是一个 bug?
我找到了这个 问题,但这里没有太多的反馈..。
2015年5月11日编辑:
正如在 安卓问题追踪器159527中提到的,这个问题不仅影响 appcompat 的 v22.1.x 和支持库,还影响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();
}
如果你不使用 appcompat (ActionBarActivity
/AppCompatActivity
) ,你需要用 startActionMode()
代替 startSupportActionMode()
。
不幸的是,目前还不清楚这是有意的新行为还是 bug。根据 空气污染指数文件的数据,这是一个错误/回归,但谁知道呢..。