【问题标题】:Multiple tabs with Webview带有 Webview 的多个选项卡
【发布时间】:2018-10-22 18:31:53
【问题描述】:

我正在创建一个包含 webview 的 3 个选项卡的应用程序。 WebView 正在加载不同的 url,例如 Amazon、Flipkart 和 Myntra。我想在各自的网站上搜索。为此,我使用 EditText 来获取关键字。来自 EditText(keyword) 的文本被传递给片段,并且 url 应该相应地更改(例如https://www.amazon.com/s/?field-keywords=keyword)。加载 url 时会出现问题。即使在将 url 与关键字连接后,Url 也不会改变。片段每次都加载相同的 url。 这是片段代码。

onButtonClick 方法

    //calling the Adapter again
    String value = et.getText().toString();
    webViewAdapter = new WebViewAdapter(getSupportFragmentManager(),this,value);
    vp.setAdapter(webViewAdapter);

适配器代码

@Override
public Fragment getItem(int i) {
    Bundle args = new Bundle();
    args.putString("search_term",key);
    switch (i)
    {
        case 0:
            AmazonFragment amazonFragment = new AmazonFragment();
            amazonFragment.setArguments(args);
            return amazonFragment;
        case 1:
            //similar to case 1
        case 2:
            //similar to case 1
    }
    return null;
}

片段代码

    String url = "https://www.amazon.com/s/?field-keywords=";
    Bundle args = getArguments();
    keyword = args.getString("search_term");
    if(keyword == null)
        keyword = "";
    View v = inflater.inflate(R.layout.webview_fragment,container,false);
    webView = v.findViewById(R.id.webview);
    url =  url.concat(keyword);
    webView.setWebViewClient(new WebViewClient(){

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            handler.proceed(); // Ignore SSL certificate errors
        }
    });

    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    webView.loadUrl(url);

请帮忙。

【问题讨论】:

  • 您需要发布调用片段的代码并将关键字也发送给它,片段似乎没问题
  • @KaranHarshWardhan 我已经编辑了代码。看看吧。
  • 与链接问题中的问题相同。您正在覆盖 url 加载,返回 true 然后尝试加载 url - webview.loadurl(url),这意味着 url 永远不会加载
  • 如果我删除 WebViewClient,URL 会加载到浏览器中。我该怎么办?

标签: android webview tabs android-edittext fragment


【解决方案1】:

更简单的方法是使用从活动到具有值的片段的接口回调,并使用修改后的数据更新片段中的 web 视图

String URL = existingUrl + searchValue;
webView.loadUrl(URL)

【讨论】:

  • 是的,这更干净,但@dev 可能需要为每个网站对他的片段进行更多自定义
  • 但没有 WebViewClient 它要求浏览器加载网站。
  • 这只是更新url的部分。 webviewClient代码不要去掉,也设置成这样stackoverflow.com/a/4066497,记得在shouldOverrideUrlLoading中返回false
【解决方案2】:

删除了对 urlloading 的覆盖,它应该可以工作

 Bundle args = getArguments();
    keyword = args.getString("search_term");
    if(keyword == null)
        keyword = "";
    View v = inflater.inflate(R.layout.webview_fragment,container,false);
    webView = v.findViewById(R.id.webview);
    url =  url.concat(keyword);
    webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed(); // Ignore SSL certificate errors
    }
});

webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.loadUrl(url);

【讨论】:

  • 字符串没有被传递给片段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多