【问题标题】:How to go back with WebView inside Fragment controlled by NavHostFragment?如何返回由 NavHostFragment 控制的 Fragment 内的 WebView?
【发布时间】:2019-06-29 08:24:19
【问题描述】:
目前情况:
- 只有一个名为 MainActivity 的活动。
- MainActivity 维护 NavHostFragment。
- 有一个 WebViewFragment 里面嵌入了一个 WebView。
- Thera 是由 NavHostFragment 控制的许多其他片段。
让我烦恼的是什么:
我可以在 WebView 中转发网页,但是当我按下返回返回 WebView 时,NavController 句柄将其弹出片段。
由于 WebView 位于片段而不是活动中,这意味着没有称为 onBackPressed() 的方法可以覆盖。
参考:
【问题讨论】:
标签:
android
navigation-drawer
android-architecture-components
【解决方案1】:
据我了解,您需要一种方法来处理片段上的onBackPressed,对吗?使用NavigationComponent,您可以在onViewCreated 中这样做:
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
findNavController().popBackStack(R.id.dest, false)
}
}
})
【解决方案2】:
添加一个新片段并在其中放置您的 WebView,使用导航编辑器从 WebViewFragment 导航到新片段,在导航编辑器的右侧,您可以看到一个用于管理 backstack 选项的选项。
【解决方案3】:
你可以使用 mWeb.goBack(); goBack 到上一页或返回。