Bạn cần phải ghi đè lên các phương pháp onKeyDown()
trong Activity
.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
myViewPager.setCurrentItem(0, true);
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
Điều này sẽ nắm bắt sự kiện nhấn nút "quay lại" và đưa người dùng đến mục đầu tiên trong ViewPager.
Ngoài ra còn có ViewPager#getCurrentItem() có thể được sử dụng để chỉ quay lại nếu người dùng đã vuốt. Triển khai như sau:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && myViewPager.getCurrentItem() == 1) {
myViewPager.setCurrentItem(0, true);
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
sẽ chỉ đưa người dùng trở lại trang trước nếu người dùng ở trang tiếp theo. Khác, nó sẽ đăng ký "trở lại" bình thường và người dùng sẽ thoát như mong đợi.
Bạn có thể muốn trường hợp người dùng quay trở lại trang trước đó (giả sử bạn có nhiều hơn hai trang). Trong trường hợp đó, bạn muốn thực hiện ViewPager.OnPageChangeListener() và lưu vị trí mỗi khi onPageSelected(int position)
được gọi. Nếu bạn thực hiện chúng trong một ngăn xếp, sau đó bạn có thể bật chúng ra mỗi khi người dùng nhấn "trở lại". Khi ngăn xếp trống, hãy thoát khỏi ứng dụng.
EDIT
Như đã trình bày một cách chính xác trong các ý kiến của Jade Byfield, một cách hơi dễ dàng hơn để làm điều này sẽ được sử dụng onBackPressed()
trong hoạt động. Điều này sẽ chỉ hoạt động ở cấp API 5+.
@Override
public void onBackPressed() {
if(i_dont_want_to_leave) {
myViewPager.setCurrentItem(0, true);
} else {
super.onBackPressed(); // This will pop the Activity from the stack.
}
}
Anh ấy cũng có thể ghi đè lênBackPressed không? Hoặc là chỉ cho các API trước đó? –
Sử dụng onKeyDown() hoạt động trên mọi cấp API nền tảng 1+. Ngoài ra, trừ khi tôi đã sử dụng nó sai tất cả cùng, onBackPressed sẽ không ngăn chặn các hoạt động được popped từ ngăn xếp. Nếu bạn trả về 'true' trong' onKeyDown() ', thì đó sẽ là điều duy nhất xảy ra và sự kiện sẽ dừng tầng. – DeeV
Đợi đã. Chỉ có một đống não. Có. Anh ta có thể sử dụng onBackPressed() nếu anh ta muốn nhắm mục tiêu API 5+. Chỉ cần không gọi 'super.onBackPressed()' trừ khi bạn hoàn toàn chắc chắn muốn thoát. – DeeV