Tôi vừa hoàn thành việc điều chỉnh một trong các ứng dụng của mình sang thư viện ứng dụng và hỗ trợ v22.1.1 mới, hãy xem tại đây và tại đây để biết thêm chi tiết. Khi tôi thực hiện một số thử nghiệm, có điều gì đó đã xảy ra với các ActionModes tôi đang sử dụng.
Khi bạn bắt đầu một ActionMode sử dụng một startSupportActionMode()
cuộc gọi - nó không quan trọng nếu bạn sử dụng bây giờ bị phản ActionBarActivity lớp cơ sở hoặc mới AppCompatActivity lớp cơ sở - onPrepareActionMode()
không được gọi.
Trong các phiên bản trước, bao gồm v21.0.3 & v22.0.0, onPrepareActionMode()
được gọi tự động khi ActionMode được tạo ban đầu bằng cách sử dụng startSupportActionMode()
.
Tôi đã thử nghiệm nó trên thiết bị 2.2, 4.4.2 và 5.0, vì vậy nó có vẻ như không phụ thuộc vào phiên bản.
Có ai biết, nếu đây là hành vi dự định, đã được giới thiệu trong v22.1.1, hoặc một lỗi?
Tôi đã tìm thấy vấn đề này , nhưng không có nhiều phản hồi ở đây ...
Chỉnh sửa ngày 11 tháng 5 năm 2015:
Như đã đề cập trong trình theo dõi sự cố Android 159527 , sự cố này không chỉ ảnh hưởng đến v22.1.x của appcompat và thư viện hỗ trợ mà còn ảnh hưởng đến việc triển khai Android 5.1.
Hai giải pháp tạm thời khả thi vào lúc này, một giải pháp chung:
@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;
}
và một cái 'nhanh và bẩn' (khi bạn khởi tạo ActionMode của mình):
final ActionMode actionMode = startSupportActionMode(new MyActionMode());
if(actionMode != null) {
actionMode.invalidate();
}
Nếu bạn không sử dụng appcompat ( ActionBarActivity
/ AppCompatActivity
), bạn cần thay thế startSupportActionMode()
bằng startActionMode()
.
Thật không may, vẫn chưa rõ đây là hành vi dự định mới hay là một lỗi. Theo tài liệu API, đó là một lỗi / hồi quy, nhưng ai biết được ...