Pre*_*thi 9 android android-viewpager back-stack
我有两个片段Frag A和Frag B,它们使用view pager呈现.如果用户从A滑动到B然后按下后退按钮(在B中),则用户应该转到A而不是离开视图寻呼机.我们怎样才能做到这一点?
向Backstack添加事务似乎没有帮助.
谢谢
Dee*_*eeV 20
你必须覆盖中的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);
}
}
Run Code Online (Sandbox Code Playgroud)
这将捕获"后退"按钮按下事件并将用户发送到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);
}
}
Run Code Online (Sandbox Code Playgroud)
只有当用户在下一页时才会将用户发送回上一页.否则,它将正常注册"后退",用户将按预期退出.
您可能需要用户返回上一页的情况(假设您有两页以上).在这种情况下,您希望实现ViewPager.OnPageChangeListener()并在每次onPageSelected(int position)调用时保存位置.如果您在堆栈中实现它们,那么每次用户按下"后退"时都可以将它们弹出.堆栈为空后,退出应用程序.
编辑
正如Jade Byfield的评论中正确陈述的那样,稍微简单一点的方法就是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.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14524 次 |
| 最近记录: |