2012-06-05 26 views
7

Tôi đang cố hoàn thành trình đơn chính trong ứng dụng của mình. Tôi nghĩ rằng nó sẽ là một liên lạc đơn giản tốt đẹp để thêm một AlertDialog trong phương pháp OnBackPressed. Tuy nhiên vì một số lý do tôi nhận được tất cả các loại lỗi.Android Nhắc một AlertDialog trênBackPressed

Tôi đã tạo AlertDialog trong OnBackPressed và hiển thị nó nhưng ứng dụng chỉ đóng khi tôi nhấn nút quay lại và tôi nhận được lỗi nói rằng cửa sổ bị rò rỉ.

Bất kỳ ý tưởng nào về cách sửa lỗi này? Tôi đã tìm kiếm khoảng 30 phút và không thể tìm thấy ai khác có vấn đề này.

+0

Hiển thị mã cho 'onBackPressed()' ... mặc dù tôi không chắc chắn rằng những gì bạn đang cố gắng làm là một ý tưởng hay. – Squonk

+1

AlertDialogs hiển thị khi nhấn nút quay lại (ví dụ: "xác nhận thoát" hộp thoại) *** nghiêm trọng *** làm chậm trải nghiệm người dùng. Tôi đã thực hiện nó trước đây và đã rất ngạc nhiên khi ứng dụng của tôi xuất hiện nhanh hơn bao nhiêu khi tôi xóa chúng trong một phiên bản tiếp theo. Không sử dụng chúng trừ khi bạn thực sự, * thực sự *, *** thực sự *** cần phải :). –

+0

@ AlexLockwood bạn sẽ nói, rằng tôi thực sự, thực sự, ** thực sự ** cần phải hiển thị một hộp thoại cảnh báo nếu không thì những thay đổi mà người dùng thực hiện sẽ bị mất bằng cách đơn giản trở lại? – winklerrr

Trả lời

2

Tôi đã tạo AlertDialog trong OnBackPressed và hiển thị nó nhưng ứng dụng chỉ đóng khi tôi nhấn nút quay lại và tôi nhận được lỗi nói rằng cửa sổ bị rò rỉ.

Nếu bên bạn OnBackPressed bạn đang gọi super.OnBackPressed() sau đó ứng dụng sẽ kết thúc, vì đó là những gì thực hiện cơ sở của OnBackPressed làm. Không gọi phương thức super và ứng dụng sẽ không đóng.

30

Cố gắng không gọi super.OnBackPressed(), mã này shoul giúp:

@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        MyActivity.this.finish(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 

} 
3

Nếu bạn muốn gọi super.onBackPressed() sử dụng mã này:

@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        //finish(); 
        MyActivity.this.onSuperBackPressed(); 
        //super.onBackPressed(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
    /* 
    if (handleCancel()){ 
     super.onBackPressed(); 
    } 
    */ 
} 

public void onSuperBackPressed(){ 
    super.onBackPressed(); 
} 

tôi vừa thêm phương thức công khai mới onSuperBackPressed với phương thức super -method vào MyActivity.

Cảm ơn bạn đã đến K_Anas để cung cấp ý tưởng tuyệt vời.

Các vấn đề liên quan