วิธีล้างเนื้อหา Webview เพื่อเปลี่ยนวิดีโอใน Android Oreo

ในกิจกรรมของฉัน ฉันมี Webview ที่ด้านบนซึ่งเล่นวิดีโอภายในนั้น ด้านล่าง Webview ฉันมีรายการวิดีโอให้เลือก สำหรับ 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);
            }
    }

โปรดช่วยบอกวิธีเปลี่ยนเนื้อหา webview ใน Android Oreo ให้ฉันหน่อยได้ไหม


person Community    schedule 04.03.2019    source แหล่งที่มา


คำตอบ (1)


เป็น clearFormData() no longer has any effect ใน Android เวอร์ชัน Oreo วิธีที่ดีที่สุดคือสร้าง Webview เป็นมุมมองใหม่ เพื่อจุดประสงค์นั้น คุณควรใช้ frameLayout ภายในไฟล์ xml และภายในไฟล์ java ให้สร้าง webview แบบไดนามิกและเพิ่ม webview นั้นใน 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);
}
}

And indside your selectVideo method call again setWebView

person Raza    schedule 27.03.2019