You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Gesture Handler的Swipeable组件在Android端失效求助

Fixing React Native Gesture Handler Swipeable Not Working on Android (Pure RN Project)

Hey there, I’ve run into exactly the same issue before—copying an Expo-based tutorial’s code but having the Swipeable component fail on a pure React Native Android project. Let’s walk through the fixes step by step:

1. Wrap Your App with GestureHandlerRootView

Expo automatically handles the gesture root view setup, but pure React Native projects require you to explicitly wrap any component using gesture handlers with <GestureHandlerRootView>. Your current code uses a ScrollView without this wrapper, which is likely the main culprit.

Update your App.js like this:

import { ScrollView, TouchableOpacity, View, Text } from 'react-native';
import Swipeable from 'react-native-gesture-handler/Swipeable';
import { GestureHandlerRootView } from 'react-native-gesture-handler'; // Add this import
import Icon from '@expo/vector-icons/Ionicons'; // Adjust icon import based on your setup
import Colors from './path-to-your-colors-file';

const RightActions = () => {
  // Fix the syntax error here: extra closing parenthesis
  return (
    <TouchableOpacity 
      style={{ 
        width: 70, 
        backgroundColor: '#f44336', 
        justifyContent: 'center', 
        alignItems: 'center' 
      }}
      onPress={() => console.warn('Delete pressed!')}
    >
      <Icon name="md-trash" size={18} color={Colors.red} />
    </TouchableOpacity>
  );
};

const App = () => {
  const data = { /* Your data object */ };

  return (
    // Wrap everything with GestureHandlerRootView
    <GestureHandlerRootView style={{ flex: 1 }}>
      <ScrollView>
        {Object.keys(data).map(key => {
          return (
            <Swipeable key={key} renderRightActions={RightActions}>
              <View style={{ padding: 16, borderBottomWidth: 1, borderBottomColor: '#eee' }}>
                <Text>Swipe left to delete</Text>
              </View>
            </Swipeable>
          );
        })}
      </ScrollView>
    </GestureHandlerRootView>
  );
};

export default App;

2. Fix Syntax Errors in Your Code

Looking at your original RightActions component, there’s a syntax mistake in the onPress callback: console.warn('works')) has an extra closing parenthesis. This can cause the component to fail silently, breaking the swipe functionality entirely.

3. Reinstall Dependencies & Clean Cache

Sometimes cached build files or incomplete installations cause issues. Run these commands:

# Reinstall gesture handler
npm install react-native-gesture-handler

# Clean Android build cache
cd android && ./gradlew clean

# Restart Metro bundler with cache reset
npx react-native start --reset-cache

4. Verify MainActivity Configuration (Double-Check)

Your MainActivity.java looks correct, but just to be sure:

  • Confirm the package name (com.project) matches your actual project’s package name.
  • Ensure RNGestureHandlerEnabledRootView is imported correctly from com.swmansion.gesturehandler.react.

Why This Works

Expo includes the gesture root view in its default app wrapper, but pure React Native projects don’t. Without <GestureHandlerRootView>, the gesture handlers can’t properly detect touch events on Android. Adding this wrapper, fixing syntax errors, and clearing cached builds should resolve the swipe issue.

内容的提问来源于stack exchange,提问作者 iNemesis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:42:14