Để bật nút quay lại ActionBar, rõ ràng bạn cần có ActionBar trong Hoạt động của mình. Điều này được thiết lập bởi chủ đề bạn đang sử dụng. Bạn có thể đặt chủ đề cho Hoạt động của mình trong AndroidManfiest.xml
. Nếu bạn đang sử dụng ví dụ như @android:style/Theme.NoTitleBar
chủ đề, bạn không có ActionBar. Trong trường hợp này, cuộc gọi đến getActionBar()
sẽ trả về null. Vì vậy, hãy chắc chắn rằng bạn có ActionBar trước.
Bước tiếp theo là thiết lập android:parentActivityName
hoạt động bạn muốn điều hướng nếu bạn nhấn nút quay lại. Điều này nên được thực hiện trong AndroidManifest.xml
quá.
Bây giờ bạn có thể kích hoạt nút quay lại trong onCreate
phương thức hoạt động "con" của mình.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Bây giờ bạn nên thực hiện logic cho nút quay lại. Bạn chỉ cần ghi đè onOptionsItemSelected
phương thức trong hoạt động "con" của bạn và kiểm tra id của nút quay lại android.R.id.home
.
Bây giờ bạn có thể kích hoạt phương thức NavUtils.navigateUpFromSameTask(this);
NHƯNG nếu bạn không chỉ định android:parentActivityName
trong AndroidManifest.xml
đó, điều này sẽ làm hỏng ứng dụng của bạn.
Đôi khi đây là những gì bạn muốn bởi vì nó nhắc nhở bạn rằng bạn đã quên "một cái gì đó". Vì vậy, nếu bạn muốn ngăn chặn điều này, bạn có thể kiểm tra xem hoạt động của bạn có cha mẹ bằng getParentActivityIntent()
phương thức này không. Nếu điều này trả về null, bạn không chỉ định cha mẹ.
Trong trường hợp này, bạn có thể kích hoạt onBackPressed()
phương thức cơ bản giống như khi người dùng nhấn nút quay lại trên thiết bị. Một triển khai tốt không bao giờ làm hỏng ứng dụng của bạn sẽ là:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (getParentActivityIntent() == null) {
Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!");
onBackPressed();
} else {
NavUtils.navigateUpFromSameTask(this);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Xin lưu ý rằng hình ảnh động mà người dùng nhìn thấy là khác nhau giữa NavUtils.navigateUpFromSameTask(this);
và onBackPressed()
.
Tùy thuộc vào con đường bạn đi, nhưng tôi thấy giải pháp hữu ích, đặc biệt nếu bạn sử dụng lớp cơ sở cho tất cả các hoạt động của mình.
getActionBar().setDisplayHomeAsUpEnabled(true);
trong onCreate vàswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
trongonOptionsItemSelected
? cả trong ServicesViewActivity