gpt4 book ai didi

android - OnBackPressed 仅在第二次按下时调用

转载 作者:行者123 更新时间:2023-12-05 07:55:10 29 4
gpt4 key购买 nike

我已经坚持了好几天了。我有一个 Activity 。我实现了

@Override
public void onBackPressed() {
Log.e("TEST", "Pressed back");
mAdapter.back();

}

布局是一个 View 寻呼机,我有一个 FragmentStatePagerAdapter 我扩展管理它。我有选项卡,我想管理它们的历史记录,所以我按照 https://stackoverflow.com/a/17832632/3821037 中的说明实现了历史记录逻辑.它工作正常但出于某种原因,在我单击更改选项卡并点击 android 后退按钮后,我第一次单击未注册 - 它不会调用 Activity OnBackPressed。第二个电话工作正常。有谁知道第一个事件去哪里?我应该说我永远不会离开同样的 Activity 。我还可以看到记录的第一个事件

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}

但我不确定哪个对象获取它(我还尝试在 fragment 和 viewPager 的 View 以及 Activity Root View 的所有父级上添加一个监听器 - 没有任何对象接收到它)。

谢谢。

最佳答案

问题在于,当您每次将历史记录保存到堆栈时,您都是在添加您将要访问的页面的 int 值。当您点击后退按钮时,您会看到它使用 onBackPressed() 但什么都不做,因为它正在弹出/导航您当前所在选项卡的历史添加。

当您从选项卡 2 转到选项卡 3 时。选项卡 3 被添加到堆栈中。

如果您在这种情况下点击后退按钮,您将导航到最后添加到堆栈的页面并同时将其删除。

所以你点击后退按钮希望导航到 2 处的选项卡。事实是,最后一个添加到堆栈的是 3,所以你导航到 3 并删除它,即使你已经在 3 上。下一个onBackPressed() 您导航到 2 并按预期将其删除。

而不是使用:

if (!pageHistory.empty()) {
viewPager.setCurrentItem(pageHistory.pop().intValue());
}

尝试:

if (pageHistory.size()>1){
pageHistory.pop().intValue();
viewPager.setCurrentItem(pageHistory.peek());
}

关于android - OnBackPressed 仅在第二次按下时调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30328170/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com