【问题标题】:How to add SwipeRefreshLayout to WebView如何将 SwipeRefreshLayout 添加到 WebView
【发布时间】:2016-10-09 15:51:25
【问题描述】:

我需要从顶部拉动以刷新我的网络视图 我在 Android 开发者网站上找到了这个,但我不知道如何使用它

xml代码

<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swiperefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Java 代码

mySwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout");

        // This method performs the actual data-refresh operation.
        // The method calls setRefreshing(false) when it's finished.
        myUpdateOperation();
    }
}

);

【问题讨论】:

    标签: android android-layout webview swiperefreshlayout


    【解决方案1】:

    您必须将 WebView 放入 SwipeRefreshLayout:

    public class MainActivity extends AppCompatActivity {
    
        WebView webView;
        SwipeRefreshLayout swipeRefreshLayout;
        String currentUrl = "https://news.ycombinator.com/";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            webView = (WebView) findViewById(R.id.webView);
            swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
    
            webView.loadUrl(currentUrl);
            webView.setWebViewClient(new MyWebViewClient());
    
            swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    webView.loadUrl(currentUrl);
                }
            });
    
    
        }
    
        public class MyWebViewClient extends WebViewClient{
    
            @Override
            public void onPageFinished(WebView view, String url) {
                swipeRefreshLayout.setRefreshing(false);
                currentUrl = url;
                super.onPageFinished(view, url);
            }
        }
    
    
    }
    

    swipeRefreshLayout.setRefreshing(false) 停止动画。

    【讨论】:

    • 好的,谢谢先生,知道这段代码中有问题,它不会刷新网站,只是会返回主页,不会重新加载此网页,而是会返回给定的根 url再次,所以现在我们需要访问当前的 webview url,所以请你帮我解决这个问题
    • 首先,不是先生。让我们放下偏见。其次,您可以检查编辑后的代码,不客气。
    • 很抱歉,这对我来说并没有改变任何东西。如果有一个字符串 currentUrl = "youtube.com";并且您的网络视图位于此网址“youtube.com/watch?v=q4y0KOeXViI”中,因此如果您对此网站进行刷新,它将返回到 currentUrl 中给出的原始网页网址
    • 嗯,是的,这个技巧不适用于 javascript。因为它不会更改网址。我不知道如何刷新这个场景中的内容。
    • 不同意这个答案,页面完成后,刷新者在刷新网页视图时无法显示他的动画
    【解决方案2】:

    为了能够刷新页面与运行相同的 URL

    1. 第一次加载页面时,您必须将链接保存在 ISharedPreferences 中

      public override void OnPageFinished(WebView view, string url)
      {
          ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
          ISharedPreferencesEditor editor = prefs.Edit();
          editor.PutString("MyURL", url);
          editor.Commit();
      }
      
    2. 当您加载 URL 进行刷新时,请使用保存的 URL

      string SaveURL = prefs.GetString("MyURL", "");
      webView.loadUrl(SaveURL);
      

      -- 其他解决方案是 Webview.Reload(); //这段代码刷新当前加载的页面

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      相关资源
      最近更新 更多