【问题标题】:Pull to Refresh on Webview for Updating Content在 Webview 上拉动以刷新以更新内容
【发布时间】:2021-06-24 03:45:33
【问题描述】:

这可能只是一件简单的事情,但请多多包涵。我刚开始学习编码和 Android Studio。

现在我正在构建一个 WebView Android 应用,我希望它具有拉动刷新功能,以显示刚刚上传的新内容,而无需关闭应用。

如何正确地做到这一点?

我看过并尝试了很多教程,但我仍然无法完全实现此功能。

我最多只能显示刷新图标,但仍然无法更新内容。

这是我使用的代码,以防您愿意帮助解决我的问题。

activity_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"
tools:context=".MainActivity">

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/swiperefresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

MainActivity Java

package com.chandragedanggoreng.bolanews;

import androidx.appcompat.app.AppCompatActivity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener{
private WebView mywebView;
private SwipeRefreshLayout refreshLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    mywebView=(WebView) findViewById(R.id.webview);
    mywebView.setWebViewClient(new WebViewClient());
    mywebView.loadUrl("https://xxxx.xxx/");
    WebSettings webSettings=mywebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swiperefresh);
    refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh () {
            refreshLayout.setRefreshing(false);
        }
    });
}

@Override
public void onRefresh () {
}

public class mywebClient extends WebViewClient{
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon){
        super.onPageStarted(view,url,favicon);
    }
        @Override
    public boolean shouldOverrideUrlLoading(WebView view,String url){
        view.loadUrl(url);
        return true;
    }
}
@Override
public void onBackPressed(){
    if(mywebView.canGoBack()) {
        mywebView.goBack();
    }
    else{
        super.onBackPressed();
    }
}
}

谢谢。

【问题讨论】:

    标签: java android-studio webview swiperefreshlayout pull-to-refresh


    【解决方案1】:

    在我的研究过程中,当我们在 Android WebView 中寻找一种可持续的拉式刷新方法时,我发现您可以通过三种简单的方法在 Android WebView 应用中实现拉式刷新:

    • 您可以使用第三方库/SDK(Java 或 Kotlin)

    • 您可以使用您的自定义实现(例如这里提到的代码 sn-ps)。此选项更复杂,但为自定义(Java 或 Kotlin)提供了更大的灵活性

    • 在 Android WebViewGold 中,在 Config.java 内,将 ENABLE__PULL_REFRESH 设置为 true(这在 Kotlin 中不起作用)

    【讨论】:

      【解决方案2】:

      在 onCreate 方法中添加这段代码

      refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
          @Override
          public void onRefresh() {
              refreshLayout.setRefreshing(true);
              new Handler().postDelayed(new Runnable() {
                  @Override
                  public void run() {
                      refreshLayout.setRefreshing(false);mywebView.reload();
                  }
              },2000);
          }
      });
      
      refreshLayout.setColorSchemeColors(
              getResources().getColor(android.R.color.holo_blue_dark),
              getResources().getColor(android.R.color.holo_orange_dark),
              getResources().getColor(android.R.color.holo_green_dark),
              getResources().getColor(android.R.color.holo_red_dark)
      
      
      );
      

      【讨论】:

      • 谢谢。你拯救了我的一天。
      • 如果我的回答有助于解决您的问题,请点击勾选按钮接受我的回答。
      猜你喜欢
      • 2013-12-06
      • 2020-12-02
      • 2013-03-23
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多