【问题标题】: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 到上一页或返回。

        【讨论】:

        • 感谢您的回答,但您可能误解了我要解决的问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-11
        • 2016-10-02
        相关资源
        最近更新 更多