【问题标题】:WebView with Video In a ViewPager keeps playing audio even after scrolling horizontallyWebView with Video In a ViewPager 即使在水平滚动后也会继续播放音频
【发布时间】:2015-07-20 05:15:41
【问题描述】:

我有一个Activity,它有一个ViewPager,其中包含一个WebView,它有Text 和Video。当我播放视频并按回时,音频仍在播放。然后我做了

@Override
public void onPause() {
    super.onPause();
    if(webView != null) {
        webView.onPause();
    }
}

@Override
public void onResume() {
    super.onResume();
    if (webView != null) {
        webView.onResume();
    }
}

但是当我在ViewPager 中滑动到下一个时,新的url 正在加载WebView,但音频仍在从前一个WebView 播放。有谁知道这个问题的解决方案吗?

编辑:

解决方案

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (webView != null) {
        if (isVisibleToUser) {
            webView.reload();
        } else {
            webView.onPause();
        }
    }
}

【问题讨论】:

  • 尝试使您的 WebView 全局化和静态化。
  • @DipeshDhakal 将整个 webview 设为静态不是一个好习惯。它可能会导致内存泄漏。

标签: android android-viewpager android-webview


【解决方案1】:

片段的 onPause() 不会被调用,因为片段不会在视图寻呼机中被销毁/暂停(除非它超出屏幕外限制)。因此您必须检查片段是否可见。

您可以这样做:

public class MyFragment extends Fragment {
  @Override
  public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
//visible to user }

    else {  
//not visible

}
      }
    }

然后用你的 webview 执行你想要的任何操作。

【讨论】:

  • @Logic 你能提供你的代码(比如适配器和片段)
  • @Logic 有什么新问题。
  • 当我移动到 viewpager 中的下一个片段时,即在代码的 else 条件下,我写了 webView.onPause();音频停止。但是当我回来播放视频然后导航到下一个视频时,它不会停止音频
  • 视情况而定,count 来自 JSON
【解决方案2】:

你必须尝试

webView.destroy();

方法可能有效。

【讨论】:

    【解决方案3】:

    将 onPageChangeListener 添加到您的 viewpager。

    /* in onViewCreated */
    ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
        }
    
        @Override
        public void onPageSelected(int position) {
            //here get the webview of the previous page and do on pause.
            if (webview of prev page position is active)
              webview of perv position.onPause();
            //resume the webView if it was previously paused
            if (webView was previously paused )
               webView of position.onResume();
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
    
        }
    });
    

    您必须填写算法。 希望这会有所帮助

    【讨论】:

    • 别忘了移除监听器。这并不重要,但它的好习惯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多