【问题标题】:react-native swipeable gesture not working on android?react-native 可滑动手势在 android 上不起作用?
【发布时间】:2026-01-16 03:35:01
【问题描述】:

我正在与 Mosh (https://codewithmosh.com/) 一起做一门 React Native 课程。我正在使用世博会。我对本机反应非常陌生,并不真正知道我在做什么,但我知道我的代码应该可以工作。我根据他的代码仔细检查了我的代码,甚至将我的项目复制到朋友的 mac 上,看看代码是否在 ios 上工作(因为 mosh 正在 ios 模拟器上运行他的代码)。在ios模拟器上,我的代码运行完美,但在android上,什么都没有发生。

这里是我实现刷卡本身的地方:

import React from 'react';
import { StyleSheet, View, Image, TouchableHighlight } from 'react-native';
import Swipeable from 'react-native-gesture-handler/Swipeable';


import AppText from './AppText';
import colors from '../config/colors';

function ListItem({title, subtitle, image, onPress, renderRightActions}) {
    return (
        <Swipeable renderRightActions={renderRightActions} >
            <TouchableHighlight underlayColor={colors.light} onPress={onPress} >  
                <View style={styles.container} >
                    <Image style={styles.image} source={image} />
                    <View> 
                        <AppText style={styles.title} >{title}</AppText>
                        <AppText style={styles.subTitle}>{subtitle}</AppText>
                    </View>
                </View>
            </TouchableHighlight>
        </Swipeable>
    );
}

然后我将其导出到另一个屏幕:

function MessagesScreen(props) {
    return (
        <Screen>
            <FlatList
                data={messages}
                keyExtractor={message => message.id.toString}
                renderItem={({ item }) => (
                <ListItem 
                title={item.title}
                subtitle={item.description}
                image={item.image}
                onPress={() => console.log('message selected', item)}
                renderRightActions={ListItemDeleteAction}
            />
        )} 
            ItemSeparatorComponent={ListItemSeparator} 
        />

        </Screen>
    );
}

我传递给 renderRightActions 道具的 listItemDelete 动作可以在这里看到:

function ListItemDeleteAction(props) {
    return (
        <View style={styles.container} ></View>
    );
}

【问题讨论】:

    标签: javascript android react-native expo gesture


    【解决方案1】:

    好吧,我找到了一个解决方案,方法是将可滑动的内容包装在一个gestureHandlerRootView中。

    import { GestureHandlerRootView } from "react-native-gesture-handler";
    
    import AppText from "./AppText";
    import colors from "../config/colors";
    
    function ListItem({ title, subtitle, image, onPress, renderRightActions }) {
      return (
        <GestureHandlerRootView>
          <Swipeable renderRightActions={renderRightActions}>
            <TouchableHighlight underlayColor={colors.light} onPress={onPress}>
              <View style={styles.container}>
                <Image style={styles.image} source={image} />
                <View>
                  <AppText style={styles.title}>{title}</AppText>
                  <AppText style={styles.subTitle}>{subtitle}</AppText>
                </View>
              </View>
            </TouchableHighlight>
          </Swipeable>
        </GestureHandlerRootView>
      );
    }
    

    【讨论】:

    • 你拯救了我的一天:)
    【解决方案2】:

    我找到了一个解决方案,方法是将可滑动的对象包装在gestureHandlerRootView 中。

    import { GestureHandlerRootView } from "react-native-gesture-handler";
    
    import AppText from "./AppText";
    import colors from "../config/colors";
    
    function ListItem({ title, subtitle, image, renderRightActions }) {
      return (
        <GestureHandlerRootView>
          <Swipeable renderRightActions={renderRightActions}>
              <View style={styles.main}>
                <Image style={styles.img} source={image} />
              </View>
          </Swipeable>
        </GestureHandlerRootView>
      );
    }

    【讨论】:

      最近更新 更多