【问题标题】:Android: how to end a fragment when transit to another?Android:转移到另一个片段时如何结束片段?
【发布时间】:2018-11-07 18:01:14
【问题描述】:

考虑到我有一个导航视图和一些与之相关的片段。我想在转移到另一个片段时结束片段

例如,如果我在片段 A 中并单击片段 B(或任何),则片段 A 应该被关闭或销毁。

注意:fragmentTransaction.replace(R.id.container, fragment); 不起作用

交易代码

if(fragment!=null){
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction ft = fragmentManager.beginTransaction();
            ft.replace(R.id.fl, fragment);
            ft.commit();

        }

【问题讨论】:

  • Remove old Fragment from fragment manager 的可能重复项。您还应该确保在您的交易中调用commit()
  • @ChrisStillwell 他们使用的替换不起作用,考虑我在第一个片段中播放视频,当我切换到第二个片段时,声音仍在后台播放。是的,我添加了 commit()
  • 啊我明白了。你在使用 VideoView 吗?如果是这样,请在 Fragment 的 onPause()onStop() 回调中调用 stopPlayback();
  • @ChrisStillwell 嗯不????我正在使用有 YouTube 视频的 webview

标签: android android-studio android-layout android-fragments android-activity


【解决方案1】:

根据 cmets,当您的 Fragment 转换时,您的 WebView 不会被卸载。要解决此问题,请从 Fragment 的 onPause()onStop() 回调中调用 webView.stopLoading();webView.destroy();。您可能还希望将这两个调用都包装在一个空检查中,以防 webView 实际卸载。所以你的代码块看起来像这样:

if(webView != null){
    webView.stopLoading();
    webView.destroy();
}

【讨论】:

  • 谢谢,我发现了一个新的方法,通过跟踪和错误,我正在删除片段堆栈 - 1 在提交之前
【解决方案2】:

这很容易,并且可以从 android 端自动处理,在替换您的片段之后就足够了,不要这样做 .addToBackStack(null) 并且当您转到下一个片段时,最后一个片段消失了

【讨论】:

  • @ArdalanSajedi我已添加。
  • 这段代码是真的,应该可以正常工作,为什么你说它不工作
  • 当我播放视频(从 YouTube 在 web 视图中)以及稍后当我更改/切换片段(存在于导航中)时,音频在后台播放。
  • 如果我按下并返回到同一个片段也很好,但问题是片段重新加载
  • 那是另一个问题,您有两种方法,首先您可以使用 onResume 方法并编写代码,当您转到第二个片段时,视频或音频将停止,并使用第一种方法不要回到 Web 视图片段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 2014-06-06
  • 2017-08-05
  • 2013-06-17
  • 1970-01-01
  • 2011-07-17
  • 2022-01-05
相关资源
最近更新 更多