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);

    }
}

0 ответов

Другие вопросы по тегам