简体   繁体   English

Android Webview“ swiperefreshlayout”不断旋转,如何阻止它?

[英]Android Webview “swiperefreshlayout” keep spinning, how to stop it?

I am trying to refresh webview using SwipeRefreshLayout . 我正在尝试使用SwipeRefreshLayout刷新SwipeRefreshLayout I don't know how to stop refresh circle. 我不知道如何停止刷新圈子。 I even don't know its refreshing webview or not. 我什至不知道其刷新的webview与否。

Here is content_main the xml. 这是content_main的xml。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.logitex.webviewandrefresh.MainActivity"
    tools:showIn="@layout/activity_main">

    <android.support.v4.widget.SwipeRefreshLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/swipeRefresh">

    <WebView  xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true" />
    </android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>

And this is the MainActivity.java 这是MainActivity.java

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {

    private SwipeRefreshLayout swipeRefreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefresh);
        swipeRefreshLayout.setOnRefreshListener(this);

        WebView myWebView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.setWebViewClient(new WebViewClient());
        myWebView.loadUrl("http://www.facebook.com");
    }

    @Override
    public void onRefresh() {
        WebView myWebView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.setWebViewClient(new WebViewClient());
        myWebView.loadUrl("http://www.facebook.com");
    }
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

  swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefresh);
  swipeRefreshLayout.setOnRefreshListener(this);

  WebView myWebView = (WebView) findViewById(R.id.webview);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    myWebView.setWebViewClient(new MyWebViewClient());
    myWebView.loadUrl("http://www.facebook.com");
  }


private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        webView.setWebChromeClient(new MyWebChromeClient());
        if(Uri.parse(url).getHost().length() == 0) {
            return false;
        }
    }

    @Override
    public void onPageFinished(WebView view, String url) {
         swipeRefreshLayout.setRefreshing(false);
        super.onPageFinished(view, url);
    }
}

@Override
public void onRefresh() {
      myWebView.loadUrl("http://www.facebook.com");
      swipeRefreshLayout.setRefreshing(true);
}

You need to add a listener so that when the WebView is finished loading, you can get a callback. 您需要添加一个侦听器,以便在WebView加载完成时可以获取回调。 So in your onCreate function do this. 因此,在您的onCreate函数中执行此操作。

myWebView.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        swipeRefreshLayout.setRefreshing(false); 
    }
});

In your onRefresh function, you need to remove this line. onRefresh函数中,您需要删除此行。

myWebView.setWebViewClient(new WebViewClient());

Because, you are assigning a new WebViewClient here which overrides the previous one that you've set in your onCreate function. 因为,您要在此处分配一个新的WebViewClient ,它会覆盖您在onCreate函数中设置的上一个WebViewClient

So finally, you MainActivity will look like this. 所以最后,您的MainActivity将如下所示。

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {

    private SwipeRefreshLayout swipeRefreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefresh);
        swipeRefreshLayout.setOnRefreshListener(this);

        WebView myWebView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.loadUrl("http://www.facebook.com");

        myWebView.setWebViewClient(new WebViewClient() {

            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                swipeRefreshLayout.setRefreshing(false);
            }
        });
    }

    @Override
    public void onRefresh() {
        WebView myWebView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.loadUrl("http://www.facebook.com");
    }
}

Got this working in my side. 在我这边工作了。 Cheers! 干杯!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM