如何清除 Webview 内容以更改 Android Oreo 中的视频

Posted

技术标签:

【中文标题】如何清除 Webview 内容以更改 Android Oreo 中的视频【英文标题】:How to clear Webview content to change the video in Android Oreo 【发布时间】:2019-03-04 14:10:35 【问题描述】:

在我的活动中,我在顶部有一个 Webview,可以播放其中的视频。 在 Webview 下方,我有一个可供选择的视频列表。对于 Oreo 之前的 android 版本,当我选择它始终在 Webview 中播放的新视频时。但在奥利奥它不起作用,它总是播放我选择的第一个视频。我读过奥利奥的文件,上面写着

调用 clearFormData() 不再有任何效果。

我正在寻找一些替代方案,但找不到任何解决方案。以下是我所做的工作

    private void initViews() 
      toolbar = findViewById(R.id.toolbar);
      if (toolbar != null) 
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle(getString(R.string.app_name));
        toolbar.setNavigationOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                onBackPressed();
            
        );
       
    recyclerView = findViewById(R.id.recycler_view);
    progressBar = findViewById(R.id.progressBar3);
    initWebView();
    if (recyclerView != null) 
        initRecyclerView(model);
    
    AdView adView= findViewById(R.id.ad_view);
    admobUtils.loadBannerAd(adView);

    

   public void initWebView() 
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    webView.getSettings().setSaveFormData(false);
    webView.clearFormData();
    webView.clearCache(true);
    webView.clearHistory();
    webView.setWebViewClient(new WebViewClient() 

        @Override
        public void onLoadResource(WebView view, String url) 
            super.onLoadResource(view, url);
            view.clearHistory();


        

        @Override
        public void onPageFinished(WebView view, String url) 
            super.onPageFinished(view, url);
            webView.setVisibility(View.VISIBLE);
            progressBar.setVisibility(View.GONE);
            RXEventBusUtils.getInstance().postEvent(new MediaPlayerEvent());
        

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) 
            super.onPageStarted(view, url, favicon);
            webView.setVisibility(View.VISIBLE);
            progressBar.setVisibility(View.VISIBLE);
        
    );
    webView.getSettings().setBuiltInZoomControls(false);
    webView.getSettings().setDisplayZoomControls(false);


    String htmlData;

    if (Constants.isFullScreen) 
        htmlData = getHtmlDataLanscape(model.getVideo_url());
     else 
        htmlData = getHtmlData(model.getVideo_url());
    
    webView.loadData(htmlData, "text/html", null);

  

这是我从列表中选择视频的地方。

  public void selectVideo()
            progressBar.setVisibility(View.VISIBLE);
            model = new MyModel();
            model = ((SelectVideoEvent) event).getModel();
            if (model.getVideo_url() != null && !model.getVideo_url().isEmpty()) 
                initRecyclerView(model);
                initWebView();
                Bundle bundleFire = new Bundle();
                Application.getFireBaseInstance().logEvent("video_from_list",bundleFire);
            
    

请谁能告诉我如何更改 Android Oreo 中的 webview 内容

【问题讨论】:

【参考方案1】:

在安卓版奥利奥中作为clearFormData() no longer has any effect。最好的方法是创建一个Webview 作为新视图。为此,您应该在 xml 文件和 java 文件中使用 frameLayout,动态创建 webview 并将该 webview 作为视图添加到 framelayout 中。

 <RelativeLayout
    android:layout_
    android:layout_>

    <FrameLayout
        android:id="@+id/myWeb"
        android:layout_
        android:layout_
        android:alwaysDrawnWithCache="true" />
</RelativeLayout>

public class TestActivity extends AppCompatActivity 
FrameLayout frameLayout;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    frameLayout = findViewById(R.id.myWeb);
    setWebView();

    /*setWebViewToLoadData*/



public void setWebView()
    frameLayout.removeAllViews();

    WebView webView = new WebView(this);
    webView.setLayoutParams(new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.MATCH_PARENT));
    frameLayout.addView(webView);


在您的 selectVideo 方法中再次调用setWebView

【讨论】:

以上是关于如何清除 Webview 内容以更改 Android Oreo 中的视频的主要内容,如果未能解决你的问题,请参考以下文章

如何清除 UIWebView/WKWebView 的内容?

Webview没有清除上一页Android

WebView在android中加载缓慢?

反应JS |为啥在输入更改时更新此状态挂钩会清除输入以防止写入任何内容?

你如何清除 UIWebView 的缓存?

如何在 appState 更改时重新加载 react-native-webview 内容