Tôi có một DialogDragment mà tôi có thể hiển thị một trong hai cách:DialogFragment hiển thị từ onContextItemSelected không tồn tại onPause/onResume
1) Bằng cách khai thác trên một mục ListView từ OnItemClickListener nó
2) Bằng cách kích hoạt menu ngữ cảnh của ListView và chọn mục menu
Làm # 1 hoạt động tốt trong mọi sự kiện vòng đời, nhưng nếu tôi gọi nó qua # 2 và tôi tạm dừng hoạt động (bằng cách đi Trang chủ) và tiếp tục lại thông qua trình chuyển tác vụ , hộp thoại không còn hiển thị nữa. Mảnh vỡ ở đó, và tôi có thể xoay thiết bị và hiển thị hộp thoại.
Tôi đã thử nghiệm và nếu tôi đặt hiển thị DialogFragment vào Trình xử lý với độ trễ ít nhất 1/2 giây, nó hoạt động.
Đoạn sau thất bại - nó cho thấy hộp thoại, nhưng sau đó tạm dừng/tiếp tục giấu nó:
public boolean onContextItemSelected(android.view.MenuItem item) {
boolean consumed = false;
switch (item.getItemId()) {
case R.id.menu_item:
showMyDialogFragment();
consumed = true;
break;
}
return consumed;
}
Vì vậy, các hoạt động của đoạn tiếp theo. Tạm dừng/tiếp tục hiển thị lại hộp thoại chính xác:
public boolean onContextItemSelected(android.view.MenuItem item) {
boolean consumed = false;
switch (item.getItemId()) {
case R.id.menu_item:
new Handler().postDelayed(new Runnable() {
public void run() {
showMyDialogFragment();
}
}, 300);
consumed = true;
break;
}
return consumed;
}
Thay thế độ trễ 300ms giây với độ trễ 0ms hoặc 250ms khiến nó bị hỏng lần nữa. Điều này có thể lặp lại 100% thời gian.
Đây là một hack khủng khiếp rõ ràng, làm tồi tệ hơn bởi hằng số đó có thể phụ thuộc vào tốc độ của thiết bị.
Bất kỳ ai biết tại sao điều này đang diễn ra và/hoặc cung cấp giải pháp tốt hơn? Tôi đã dành hàng giờ cho vấn đề này và đây là điều tốt nhất tôi có thể nghĩ ra.
Tôi nghĩ điều này có thể liên quan đến hoạt ảnh ẩn của menu. Ngay cả một Nexus One cũ, chậm, độ trễ 300ms vẫn hoạt động. –
Nếu bạn có cơ hội, hãy đăng một dự án mẫu hoàn chỉnh thể hiện hiện tượng này, vì tôi muốn xem qua nó. Nếu đó thực sự là lỗi nền tảng, chúng tôi sẽ cần dự án đó để giúp khắc phục sự cố. Ngoài ra, liệu đây có phải là sử dụng đoạn API cấp 11 gốc hay cổng sau của gói Hỗ trợ Android không?Nếu sau này, bạn có chắc chắn rằng bạn đang sử dụng phiên bản mới nhất của JAR hỗ trợ Android không? – CommonsWare
Đây là dự án mẫu trình bày vấn đề: https://github.com/androidmoney/Menu-DialogFragment-Test Điều này xảy ra cả trên bản gốc và gói hỗ trợ. Để hiển thị sự cố, hãy hiển thị hộp thoại hoặc nút hoặc mục menu. Sau đó tạm dừng (đi tới Trang chủ) và tiếp tục (nhập lại ứng dụng bằng trình chuyển đổi ứng dụng). –