- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 fragment 堆栈,我在其中使用替换和相加。添加或替换我的 fragment 的代码(在我的 Activity 中)如下
private fun addFragment(fragment: Fragment, name: String) {
supportFragmentManager.beginTransaction().add(R.id.container, fragment)
.addToBackStack(name).commit()
}
private fun replaceFragment(fragment: Fragment, name: String) {
supportFragmentManager.beginTransaction().replace(R.id.container, fragment)
.addToBackStack(name).commit()
}
在我的 fragment 中,我确实有一个带有主菜单后退图标的工具栏。单击后,它应该有助于将我的 fragment 弹出到上一个堆栈。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
toolbar_actionbar.setNavigationIcon(R.drawable.ic_arrow_back_black_24dp)
setHasOptionsMenu(true)
(activity as AppCompatActivity).setSupportActionBar(toolbar_actionbar)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return if (item.itemId == android.R.id.home) {
activity?.onBackPressed()
ĐÚNG VẬY
} khác {
super.onOptionsItemSelected(item)
}
}
为了清楚起见,我展示了 onBackPressed Activity 的编码如下
override fun onBackPressed() {
if (supportFragmentManager.backStackEntryCount > 0) {
supportFragmentManager.popBackStackImmediate()
} khác {
super.onBackPressed()
}
}
现在,如果我添加 fragment1、添加 fragment2、添加 fragment3、添加 fragment4,然后按返回、返回、返回、返回...一切正常。
同样,如果我用 fragment1 替换,用 fragment2 替换,用 fragment3 替换,用 fragment4 替换,然后返回,返回,返回,返回,一切正常。
但是,如果我这样做,替换为 fragment 1,添加 fragment 2,并替换为 fragment 3,然后按返回,返回,返回...。第三次按返回不再有效。为什么??
为了更好地说明这一点,我已将我的代码放在 github 中,如下所示 https://github.com/elye/issue_android_fragment_replace_add_replace
并记录到下面的 gif(63 秒 gif)中显示,4 个添加有效,4 个替换有效,但是替换和添加的混合,将导致工具栏后退按钮在几次后退后不起作用。
请注意添加 fragment 显示重叠数,因为背景是透明的。这样做是为了轻松区分添加与替换。
我怀疑这是一个谷歌错误,但我认为应该分享以防我错过任何重要的事情。
1 Câu trả lời
经过调查,问题确实如下所述。
因为每个 fragment 都有自己的操作栏集(在这个 stackoverflow 中,我将其简化为仅单击 R.id.home 以便更轻松地说明问题)。添加/删除 fragment 时,每个都会调用以下代码。
(activity as AppCompatActivity).setSupportActionBar(toolbar_actionbar)
当我们执行 add-add-replace(或 replace-add-replace)时......我们在后台堆栈中有 3 个 fragment ,但只有一个可见。因为最后一个替换,将删除前面的 2 个 fragment 。
当我们点击后退按钮时,最后被替换的 fragment 将被弹出,系统然后恢复前2个 fragment 。
在恢复前 2 个 fragment 的过程中,将在短时间内为两个 fragment 调用以下代码
(activity as AppCompatActivity).setSupportActionBar(toolbar_actionbar)
我怀疑这会导致第一个 fragment 的工具栏未完全设置的某些行为(Android SDK 错误?)。
为了解决这个问题,当我们再次弹出 2 个 fragment 时,我们必须强制调用第一个 fragment
(作为 AppCompatActivity 的 Activity ).setSupportActionBar(toolbar_actionbar)
针对上述问题,我的解决方法是将上面的代码放在 onResume() 中。
override fun onResume() {
super.onResume()
(activity as AppCompatActivity).setSupportActionBar(toolbar_actionbar)
}
每当一个fragment backstack改变时,我会调用top fragment的onResume
supportFragmentManager.addOnBackStackChangedListener {
val currentFragment = supportFragmentManager.findFragmentById(R.id.container)
currentFragment?.onResume()
}
这现在有助于确保无论堆栈的替换添加混合情况如何,工具栏菜单都将继续工作。
我有示例解决方法代码 https://github.com/elye/issue_android_fragment_replace_add_replace_workaround
这实际上是一种解决方法,而不是解决方案。我希望发布一些更好的答案,或者如果这确实是 Google Bug,可以在以后的 SDK 版本中对其进行修复。
关于android - 替换、添加、替换 fragment ,然后导航后退按钮不适用于第一个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48941001/
浏览器或类似浏览器的应用程序中的后退和前进按钮暂时导航(用户导航页面的顺序),这可能不一定反射(reflect)页面的逻辑顺序。是否有任何研究探讨这如何影响用户的心理模型?关于如何提高可用性和减少困惑
如果你去http://www.deviantart.com/并等待几秒钟,以便在引擎盖下加载 javascript,您可以单击一个链接,而不是转到该链接,您将转到 #/someId。您可以后退/前进。
Đã đóng. Câu hỏi này không đáp ứng được hướng dẫn của Stack Overflow. Đã đóng. Câu hỏi này cần tập trung hơn. Hiện tại không chấp nhận câu trả lời. Bạn muốn cải thiện vấn đề này? Cập nhật câu hỏi để nó đúng chủ đề
This question already has answers here: How to stop audio from playing when back button is pressed?
Visual Studio 有一个名为 MouseNavi 的插件它允许您使用鼠标拇指按钮来浏览您的历史记录。 Eclipse 是否存在类似的扩展? 最佳答案 我不知道有任何 Eclipse 插件可以
我在grails上开发了一个小应用程序,第一页是我提供的邮政编码,可以按商店搜索附近的商店并选择它,然后按下一步按钮,第二页上是输入客户详细信息,然后按下一步按钮在第三页上显示输入的值,然后保存它。现
我有一个带有表单的页面,我试图在其中防止重复提交,这非常简单(以防万一有人好奇,我使用了这个 $("form").submit(function() { setTimeout(function
在过去的两天里,我一直在用一个恼人的小故障敲我的头,希望有人能解释一下。 基本设置:我有一个带有播放器的 AVPlayerLayer, View 中有一个平移手势识别器,我希望用户能够来回滑动手指,视
我有一个相当具体的用例。 假设我从页面 A 导航到页面 B(添加一个历史状态)。然后,在页面 B 上,我通过打开模式与该页面进行交互。但模式的实现方式是在单击浏览器后退按钮时关闭。 当模式打开时: n
我以前自己尝试过,但失败了。如何将 JButton 添加到 JFrame 以将其带回到之前打开的 JFrame 或“主页”框架。 在我的应用程序中,我有 4 个 JFrame,主要的和 3 个可通过按
想法是显示消息,这将通知用户,当他使用“后退”按钮时,应用程序的ajax部分可能会错误地工作。是的,有很多讨论,但没有解决方案。我发现最好的:在服务器端存储有关最后一页的信息,并通过 ajax 检查当
我有一个带有Fragment的Activity,并且有很多交易,所以后退按钮通常只是回滚Fragment交易 .但我需要检测最后一次按下。 我不能使用 onPause 方法,因为我不想在用户按下主页或
我目前使用Glide库播放GIF如下。 Glide.with(this).load(gifUrl).into(ImageView); 这很好用,但我希望用户可以选择倒回、暂停和转发 GIF。我在想只是
我正在开发一个 WPF 桌面应用程序,我有一个主窗口,我使用框架控件导航到不同的页面。它工作得很好。但我希望删除后退/前进。我该怎么做 ?请在这方面帮助我! 最佳答案 设置 NavigationUIV
我正在游戏结束时显示插页式广告。当用户快速按下“后退”按钮时,有时会发生崩溃: java.lang.IllegalStateException at android.media.MediaPlayer
我想禁用导致 Chrome 后退或前进的两指滑动。 我有一个网站,如果用户没有专门保存,他可能会失去工作进度。 我试过使用 window.onbeforeunload但是,如果我在 url 中有哈希值
后退箭头在 Xcode 中损坏? 是否有键盘命令可以一次后退/前进一个文件。 Xcode 3.2更改了 Cmd-Opt 的行为。正如另一个问题中所指出的,它们不像以前版本的 Xcode 那样在文件级
我有这些复选框 Menu Filters Select All Unselect All Vegan Vegetar
我想在按下返回按钮时将我当前的 flutter 页面重定向到主页,将重定向。当我按返回按钮时,主页/ Activity 应开始。我在主页中有多种选择,在当前页面中,如果用户不想选择它们,我可以显示眼睛
按住下一个按钮时,音频播放器速度加快... 代码代表一切 main question : How to continue to normal ? 这是我的尝试 http://jsfiddle.net/
Tôi là một lập trình viên xuất sắc, rất giỏi!