我有两个片段Frag A和Frag B,它们是使用视图翻页器呈现的。如果用户从A滑到B,然后在B中按返回按钮,则用户应该跳转到A而不是跳出视图翻页器。我们该如何实现这一点?将事务添加到返回堆栈似乎并没有帮助。谢谢。
您必须在Activity
中覆盖onKeyDown()
方法。
@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);
}
}
@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);
}
}
onPageSelected(int position)
时保存位置。如果您在堆栈中实现它们,那么每次用户按“back”键时都可以弹出它们。一旦堆栈为空,就退出应用程序。onBackPressed()
。这仅适用于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.
}
}
https://developer.android.com/training/animation/screen-slide.html#viewpager
我找到了一个处理ViewPager
滑动的示例,并且有一个方法。@Override
public void onBackPressed() {
if (mPager.getCurrentItem() == 0) {
super.onBackPressed();
}
else {
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}
}
这个选项可以返回上一页或退出当前活动。
public abstract class BackKeyHandlingFragment extends Fragment {
public abstract boolean handleBackKey();
}
Activity可以将backKey处理委托给当前的Fragment。Fragment可以在其各自实现的handleBackKey方法中执行所需的操作。该方法可以返回true,告诉Activity不要处理back key。要继续使用Activity级别的默认back key操作,该方法可以返回false。
public void onBackPressed() {
BackKeyHandlingFragment fragment = (BackKeyHandlingFragment) mSectionsPagerAdapter.getItem(mViewPager.getCurrentItem());
// Fragment should return boolean according to app requirements after processing back key
if (!fragment.handleBackKey()) {
super.onBackPressed();
}
}
onKeyDown()
中返回true
,那么这将是唯一发生的事情,事件将停止级联。 - DeeVsuper.onBackPressed()
。 - DeeV