Как очистить содержимое Webview, чтобы изменить видео в Android Oreo - PullRequest
0 голосов
/ 04 марта 2019

В разделе «Мои действия» у меня есть веб-вид сверху, который воспроизводит видео внутри него.ниже веб-просмотра у меня есть список видео для выбора.Для версий Android до Oreo, когда я выбираю новое видео, оно всегда воспроизводится в Webview.Но в Oreo он не работает, он всегда проигрывает первое видео, которое я выбрал.Я прочитал документ Oreo, в котором говорится, что

Вызов 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

1 Ответ

0 голосов
/ 27 марта 2019

Как clearFormData() no longer has any effect в версии для Android Oreo.Лучший способ - создать Webview как новый вид.Для этого вам следует использовать frameLayout внутри xml-файла и внутри java-файла, динамически создавать веб-представление и добавлять это веб-представление в framelayout как представление.

 <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="200dp">

    <FrameLayout
        android:id="@+id/myWeb"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        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

...