Tôi có một hoạt động có chứa một số mục có thể chỉnh sửa của người dùng (trường EditText, RatingBar, v.v.). Tôi muốn nhắc người dùng nếu nút quay lại/trang chủ được nhấn và các thay đổi đã được thực hiện mà chưa được lưu. Sau khi đọc qua tài liệu android, có vẻ như đoạn mã này nên đi theo phương thức onPause. Tôi đã thử đặt một AlertDialog trong onPause Tuy nhiên hộp thoại được hiển thị và sau đó ngay lập tức rơi xuống vì không có gì là có để ngăn chặn tạm dừng hoàn thành.Android: Nhắc người dùng lưu thay đổi khi nút Quay lại được nhấn
Đây là những gì tôi đã đưa ra cho đến nay:
@Override
protected void onPause() {
super.onPause();
AlertDialog ad = new AlertDialog.Builder(this).setMessage(
R.string.rating_exit_message).setTitle(
R.string.rating_exit_title).setCancelable(false)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// User selects OK, save changes to db
}
}).setNeutralButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// User selects Cancel, discard all changes
}
}).show();
}
Tôi có đi đúng hướng hay là có một cách khác để đạt được những gì tôi đang cố gắng để làm ở đây? Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời!
Sử dụng phương pháp onKeyDown() sẽ có những vấn đề tương tự như onPause(). Nếu tôi cố gắng hiển thị một hộp thoại cảnh báo trong khối onKeyDown khi tôi phát hiện mã khóa Back, hộp thoại vẫn không chặn. Tôi sẽ thấy cảnh báo trong giây lát cho đến khi super.onKeyDown được nhấn sẽ làm cửa sổ đóng lại. Có cách nào để buộc một phản ứng với AlertDialog trước khi tiếp tục? – chriskopec
Bạn có đang gọi super.onKeyDown() nếu bạn sử dụng nút quay lại không? Tôi giả sử rằng bạn chỉ nên sử dụng "trả về true" nếu bạn mở hộp thoại, để chỉ ra cho hệ thống mà bạn đã tiêu thụ nút quay lại; nếu không, bằng cách gọi super(), bạn sẽ vẫn kết thúc cuộc gọi tất cả những thứ kết thúc hoạt động. –
Đó là nó, Cảm ơn! – chriskopec