我已经陷入困境了几天。我有一个活动。我实施
@Override
public void onBackPressed() {
Log.e("TEST", "Pressed back");
mAdapter.back();
}
布局是一个视图寻呼机,我有一个fragmentStatePagerAdapter我扩展了管理它。我有标签,我想管理他们的历史记录,因此我实现了历史逻辑,如https://stackoverflow.com/a/17832632/3821037所述。它可以正常工作,但是由于某些原因,我单击以更改选项卡并在我第一次单击时点击Android后退按钮后,它不会调用Activity Onbackpressed。第二个通话正常。有人知道第一个事件去向吗?我应该说我永远不会离开相同的活动。我还可以看到第一个已记录的事件
05-20 12:44:17.952: I/ViewRootImpl(22749): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=8406029, downTime=8406029, deviceId=-1, source=0x101 } to com.android.internal.policy.impl.PhoneWindow$DecorView{428bba20 V.E..... R....... 0,0-1080,1776}
但是我不确定哪个对象会得到它(我还尝试在片段和视图器的视图上添加一个侦听器,以及活动的根视图的所有父母 - 什么都没有收到)。
谢谢。
问题是,当您每次将历史记录保存到堆栈中时,您都在添加您要使用的页面的INT值。当您点击"后退"按钮时,您正在看到它使用onbackpressed(),但是什么也不做,因为它正在弹出/导航您当前上的标签的历史记录添加。
从选项卡2到3。
如果在此情况下点击了后面按钮,则将导航到添加到堆栈中的最后一页并同时删除它。
因此,您按下了后面的按钮,希望在2处导航到标签。这是三个是添加到堆栈中的最后一个,因此您导航至3并删除它,即使您已经在3中。onbackpressed()您导航至2,并像预期一样删除它。
而不是使用:
if (!pageHistory.empty()) {
viewPager.setCurrentItem(pageHistory.pop().intValue());
}
尝试:
if (pageHistory.size()>1){
pageHistory.pop().intValue();
viewPager.setCurrentItem(pageHistory.peek());
}