Вы должны переопределить метод onKeyDown()
в файле 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);
}
}
Это зафиксирует событие нажатия кнопки "назад" и отправит пользователя к первому элементу в ViewPager.
Существует также ViewPager#getCurrentItem() который можно использовать для возврата, только если пользователь провел пальцем по экрану. Такая реализация:
@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);
}
}
отправит пользователя обратно на предыдущую страницу, только если пользователь находится на следующей странице. В противном случае он нормально зарегистрирует «назад», и пользователь выйдет, как и ожидалось.
Вам может понадобиться случай, когда пользователь возвращается на предыдущую страницу (при условии, что у вас более двух страниц). В этом случае вы хотите реализовать ViewPager.OnPageChangeListener () и сохранять позицию каждый раз, когда вызывается onPageSelected(int position)
. Если вы реализуете их в стеке, вы можете выталкивать их каждый раз, когда пользователь нажимает «назад». Когда стек опустеет, выйдите из приложения.
ИЗМЕНИТЬ
Как правильно указано в комментариях Джейд Байфилд, несколько более простым способом сделать это было бы использовать onBackPressed()
в Activity. Это будет работать только на уровнях 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.
}
}
person
DeeV
schedule
01.11.2012