[Android] WebView pullToRefreshEnabled not working (works on iOS)

Author: sultanmyrzaCreated Aug 14, 2025Updated Jul 20, 2026
LabelsType: bug report

Bug description: When using react-native-webview with pullToRefreshEnabled={true}, the pull-to-refresh gesture works as expected on iOS, but does not work at all on Android. No refresh is triggered when swiping down.

This means Android developers need to implement workarounds (such as wrapping the WebView in a ScrollView with RefreshControl), but this introduces side effects like unwanted refresh triggers when scrolling within long web content.

To Reproduce: Minimal example: or try this snack in Expo Go

javascript
import React from 'react';
import { SafeAreaView, StyleSheet } from 'react-native';
import { WebView } from 'react-native-webview';

export default function App() {
  return (
    <SafeAreaView style={styles.safeArea}>
      <WebView 
        source={{ uri: 'https://expo.dev' }} 
        style={styles.webView}
        pullToRefreshEnabled={true}
      />
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  safeArea: { flex: 1 },
  webView: { flex: 1 }
});

Steps: 1. Run this code on iOS — pull-to-refresh works as expected. 2. Run the same code on Android — pull-to-refresh does nothing.

Expected behavior: On Android, pullToRefreshEnabled={true} should enable the same pull-to-refresh gesture behavior as on iOS, without requiring any additional wrappers or hacks.

Screenshots/Videos:

✅ iOS

https://github.com/user-attachments/assets/8a85a620-b63c-4cbe-ac6e-2c9ea8877ba8

❌ Android

https://github.com/user-attachments/assets/d545e0b7-89b0-4ee0-a7dc-4892218f98ca

Environment: • OS: Android • OS version: (e.g., Android 13) • react-native version: 0.79.5 • react-native-webview version: 13.13.5

Additional context / Workaround attempts: Someone suggested wrapping the WebView in a ScrollView with a RefreshControl:

javascript
<ScrollView
  contentContainerStyle={{ flex: 1 }}
  refreshControl={
    <RefreshControl
      refreshing={refreshing}
      onRefresh={onRefresh}
    />
  }
>
  <WebView
    ref={webviewRef}
    source={{ uri: BASE_URL }}
    onLoadEnd={() => setRefreshing(false)}
  />
</ScrollView>

While this works when web content is long, it causes unwanted refresh triggers when the user scrolls up and down to the top, which is not the desired behavior.

Request: Please align the Android pullToRefreshEnabled implementation with iOS so it works out of the box without extra wrappers or custom gesture handling.

Source: react-native-webview/react-native-webview