Android SwipeRefreshLayout с проблемой вертикальной прокрутки WebView
При использовании SwipeRefreshLayout с WebView (как дочернее представление) прокрутка вверх на веб-сайте не работает, поскольку вместо этого запускается действие прокрутки вниз для обновления.
Каждое решение, которое я нашел в Интернете, похоже, не работает для меня. Я пробовал использовать NestedScrollView, ViewTreeObserver OnScrollChangedListener и CanChildScrollUpCallback. Последнее решение кажется наиболее рекомендуемым, поэтому я бы предпочел решение с использованием метода обратного вызова. Вот как я пытался это реализовать:
swipeRefreshLayout.setOnChildScrollUpCallback((parent, child) -> webView.canScrollVertically(-1));
Но я не могу заставить его работать, и я не знаю, почему. Любая помощь приветствуется.
Вот остальная часть кода, который идет вместе с ним:
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
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/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SwipeRefreshLayout swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_refresh_layout);
webView = findViewById(R.id.web_view);
swipeRefreshLayout.setOnChildScrollUpCallback((parent, child) -> webView.canScrollVertically(-1));
swipeRefreshLayout.setOnRefreshListener(
() -> {
webView.reload();
swipeRefreshLayout.setRefreshing(false);
}
);
webView.setWebViewClient(new WebViewClient());
CookieManager.getInstance().setAcceptCookie(true);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
String url = "https://WEBSITE";
webView.loadUrl(url);
}
}