2013-08-20 37 views
37

Có thể ghi đè lênBackPressed() cho chỉ một hoạt động không?Android Overriding onBackPressed()

Khi bấm nút quay lại Tôi muốn gọi một hộp thoại trên một Hoạt động cụ thể, nhưng trong tất cả các hoạt động khác tôi muốn nó hoạt động như trước đây (đi đến các hoạt động trước). . .

Cảm ơn bạn đã anwsers trước.

EDITED

Cảm ơn mọi người cho anwsers của bạn, tôi đã có tất cả mọi thứ như bạn nói với tôi, nhưng vấn đề của tôi là khi tôi đã nhấn lại nút trên Hoạt động khác, tôi sẽ Hoạt động trước đây của tôi (Một trong những nơi mà tôi đã trở lại nút Overriden) và tôi nghĩ rằng nó đã không làm việc, tôi nghĩ rằng nó là trọng onBackPressed() trong toàn bộ ứng dụng, bây giờ tôi đã nhận nó: D

+0

[tham khảo ở đây] (http: // stackoverflow.com/a/3142471/2345913) – CRUSADER

+1

Làm mới trang này để tăng số lượng "đã xem" lên 50.000 – suku

Trả lời

107

Có. Chỉ ghi đè lên nó trong đó một Activity với

@Override 
public void onBackPressed() 
{ 
    // code here to show dialog 
    super.onBackPressed(); // optional depending on your needs 
} 

không đặt mã này trong bất kỳ khác Activity

+1

Mã trên hoạt động như thế nào trong phân đoạn? Đây có phải là giải pháp –

+0

xin chào tôi có cùng một vấn đề hoạt động của tôi 2 đang diễn ra hoạt động 1 nhưng tôi không muốn hoạt động 1 nếu tôi nhấp lại vào hoạt động 2 ứng dụng của tôi nên thoát. Làm thế nào tôi có thể làm điều đó ? –

+0

@Tabishkhan chỉ cần gọi 'finish()' trên hoạt động 1 sau khi bắt đầu ý định cho hoạt động 2. Sau đó, hoạt động 2 sẽ là người duy nhất trong ngăn xếp – codeMagic

2

Chỉ cần gọi phương thức onBackPressed() trong hoạt động bạn muốn hiển thị hộp thoại và bên trong hộp thoại hiển thị hộp thoại của bạn.

31

Override phương pháp onBackPressed() theo ví dụ bằng cách codeMagic, và loại bỏ các cuộc gọi đến super.onBackPressed(); nếu bạn không muốn hành động mặc định (hoàn thành hoạt động hiện tại) sẽ được thực hiện.

+12

+1 để giải thích super.onBackPressed() nào – erdomester

0

Cách tốt nhất và chung nhất để kiểm soát âm nhạc là tạo ra một Hoạt động mẹ trong đó bạn ghi đè startActivity(Intent intent) - trong đó bạn đặt shouldPlay=true, và onBackPressed() - trong đó bạn đặt shouldPlay = true. onStop - trong đó bạn đặt phương tiện truyền thông có điều kiệnPlayer.stop với shouldPlay là điều kiện

Sau đó, chỉ cần mở rộng hoạt động của mẹ sang tất cả các hoạt động khác và không cần sao chép mã.

4

Bạn chỉ có thể gọi cho onBackPressed() và nếu bạn muốn có một số hoạt động để hiển thị sau khi nút quay lại bạn có đề cập đến

Intent intent = new Intent(ResetPinActivity.this, MenuActivity.class); 
    startActivity(intent); 
    finish(); 

mà làm việc cho tôi.

0

Lúc đầu, bạn phải xem xét rằng nếu hoạt động của bạn mà tôi gọi là A mở rộng khác hoạt động (B) và trong cả hai

họ bạn muốn sử dụng onbackpressed chức năng sau đó tất cả các mã mà bạn có trong B chạy trong Một quá. Vì vậy, nếu bạn muốn tách chúng, bạn nên tách chúng ra. Nó có nghĩa là A không nên mở rộng B, sau đó bạn có thể được inbackpressed riêng cho mỗi người trong số họ.

0

Hãy thử nó này làm việc

@Override 
public void onBackPressed(){ 
     super.onBackPressed(); 
     Intent i=new Intent(Intent.ACTION_MAIN); 
     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     finish(); 
} 
0

Chỉ cần sử dụng đoạn mã sau với khởi tạo một lĩnh vực

private int count = 0; 
    @Override 
public void onBackPressed() { 
    count++; 
    if (count >=1) { 
     /* If count is greater than 1 ,you can either move to the next 
     activity or just quit. */ 
     Intent intent = new Intent(ResetActivity.this, LoginActivity.class); 
     startActivity(intent); 
     finish(); 
     overridePendingTransition 
     (R.anim.push_left_in, R.anim.push_left_out); 
     /* Quitting */ 
     finishAffinity(); 
    } else { 
     Toast.makeText(this, "Press back again to Leave!", Toast.LENGTH_SHORT).show(); 

     // resetting the counter in 2s 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       count = 0; 
      } 
     }, 2000); 
    } 
    super.onBackPressed(); 
}