如何在RecyclerView中加载WebView?

3

我想在RecyclerView中加载WebView。

我尝试的方法是在默认浏览器(例如Chrome)中打开了网页。

有人可以帮我吗?


1
你有什么阻止你自己尝试的呢? - B001ᛦ
我已经尝试过。但是网页在默认浏览器(比如Chrome)中打开。所以我问了这个问题。 - Entertainment S
请查看 WebView 组件,而不是启动一个意图。https://developer.android.com/reference/android/webkit/WebView在 RecyclerView 的行内使用此组件。 - Kyle
你需要继承 WebViewClient!! - Ganesh Tikone
请解释 @GaneshTikone - Entertainment S
不确定为什么会有人踩,这是一个合法的问题,因为我也遇到了同样的问题。我一直在尝试在onBindViewHolder中加载webview上的loadUrl,但它会询问你是否要在另一个浏览器中打开URL,而不是只加载webview。 - MeatPopsicle
2个回答

3

从Android库中继承了WebView:

import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;


public class MyWebView extends WebView {

  public MyWebView(Context context) {
    super(context);
    initDefaultSetting();
  }

  public MyWebView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initDefaultSetting();
  }

  public MyWebView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initDefaultSetting();
  }

  public MyWebView(Context context, AttributeSet attrs, int defStyleAttr,
      int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    initDefaultSetting();
  }


  private void initDefaultSetting() {
    WebSettings webSettings = this.getSettings();
    webSettings.setJavaScriptEnabled(true);
    setWebChromeClient(new WebChromeClient());
    setWebViewClient(new MyWebViewClient());
  }

  /**
   * Load Web View with url
   */
  public void load(String url) {
    this.loadUrl(url);
  }

}

从库中继承并覆盖WebViewClient方法
类:MyWebViewClient
public class MyWebViewClient extends WebViewClient {

  @Override
  public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    view.loadUrl(request.getUrl().toString());
    return true;

  }
}

布局:row_my_web.xml

<FrameLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="300dp">

  <com.silicus.fluidforms.MyWebView
    android:id="@+id/myWebView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</FrameLayout>

类:ParentAdapter

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.silicus.fluidforms.MyWebView;
import com.silicus.fluidforms.R;
import com.silicus.fluidforms.expandable.ParentAdapter.MyViewHolder;


    public class ParentAdapter extends RecyclerView.Adapter<MyViewHolder> {


      private String urlList[] = {
          "https://dev59.com/ynE85IYBdhLWcg3wUByz",
          "https://developer.android.com/guide/webapps/webview",
          "https://www.google.com",
          "https://www.bling.com"};


      @NonNull
      @Override
      public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.row_my_web, parent, false);
        return new MyViewHolder(itemView);
      }

      @Override
      public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.myWebView.load(urlList[position]);
      }

      @Override
      public int getItemCount() {
        return urlList.length;
      }

      class MyViewHolder extends RecyclerView.ViewHolder {

        MyWebView myWebView;

        MyViewHolder(View itemView) {
          super(itemView);
          myWebView = itemView.findViewById(R.id.myWebView);
        }
      }
    }

1
如果你的意思是,页面没有加载,而是弹出一个窗口询问你如何打开URL,那么你可以通过为Web视图添加WebViewClient来修复它。
WebViewClient webViewClient = new WebViewClient();
webView.setWebViewClient(webViewClient);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接