2014-11-20 16 views
7

Tôi đang cố gắng ghi đè lênBackPressed(). Tuy nhiên nó dường như không phát hiện khi tôi nhấp vào nút quay lại trong thanh hành động.Tại sao onBackPressed() không được gọi?

Tôi hiện đang có mã này:

@Override 
public void onBackPressed() { 

    Log.i("DATA", "Hit onBackPressed()"); 
    super.onBackPressed(); 

} 

Thông điệp log không bao giờ xuất hiện trong LogCat. Tôi biết rằng câu lệnh log này hoạt động vì nó được sao chép từ một phương thức khác với một thông báo khác mà DOES hiển thị trong LogCat.

Tôi đã tìm kiếm câu trả lời và tôi đã thử sử dụng onKeyDown và phát hiện nếu đó là nút BACK được nhấp nhưng tôi vẫn gặp sự cố tương tự. Thông tin về dự án:

  • Android Studio 0.9.3
  • Phương pháp nằm trong hoạt động trống
  • mục tiêu sdk 21
  • sdk tối thiểu thiết bị thử nghiệm 15
  • là Samsung Galaxy 5 (không giả lập)

Bất kỳ trợ giúp nào sẽ được đánh giá cao !!

EDIT:

Đây là một bản sao của mã làm việc của tôi (đây là mã kiểm tra nên tên hoạt động là không mô tả):

public class MainActivity2 extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_activity2); 
    getActionBar().setDisplayHomeAsUpEnabled(true);//Displays the back button 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main_activity2, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 

      Log.i("DATA", "Hit Actionbar Back Button"); 

      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

} 

Thông điệp "Hit Actionbar Nút Quay lại" bây giờ xuất hiện trong LogCat.

+0

'nút quay lại trong bar.' hành động vì nút trong actionbar không phải là một nút quay lại. Đây là nút 'up'. xem http://developer.android.com/training/implementing-navigation/ancestral.html – njzk2

Trả lời

18

onBackPressed() được gọi khi người dùng nhấp vào nút quay lại phần cứng (hoặc trên nút 'lên' trong thanh điều hướng), chứ không phải nút trên thanh tác vụ. Đối với cái này, bạn cần ghi đè phương thức onOptionsItemSelected(). Ví dụ:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      // click on 'up' button in the action bar, handle it here 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
}  
+2

Nó không phải là nút phần cứng, nó cũng hoạt động trên nút quay lại mềm trong thanh điều hướng. – Lars

+0

@Lars oops, nhận xét tốt! tất cả các điện thoại Android tôi đã có cho đến nay đã có nút navigaion phần cứng, do đó tôi luôn luôn quên về các nút trong thanh điều hướng. – aga

+0

Điều đó làm việc hoàn hảo. Cảm ơn! – kkimble006

0

Vui lòng thử mã này,

public class MainActivity2 extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 


@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 

    Toast.makeText(getApplicationContext(), "back press is call", Toast.LENGTH_LONG).show(); 
} 
} 
+0

Bánh mì nướng vẫn không xuất hiện. @aga đã có câu trả lời đúng. Cảm ơn! – kkimble006

+0

@ kkimble006 bạn có thể vui lòng chia sẻ cho bạn mã hoạt động đầy đủ không. –

+0

Tôi đã đăng toàn bộ mã hoạt động đang hoạt động của mình @KrunalI – kkimble006

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