反应导航:在Android上无法在抽屉上滑动

时间:2018-11-20 14:16:49

标签: android react-native react-navigation swipe

很长时间以来,我一直在寻找解决方案,但是令人惊讶的是,我认为还没有人面对过它。所以我要发布它。

我已经用React Navigation V3创建了一个简单的Drawer Navigator。我添加了一个菜单图标,当我单击它时,抽屉应显示为应有的状态。但是,没有手势在起作用。从左向右滑动不会做任何事情。即使打开抽屉,在空白处点击也不会关闭抽屉。

这是我的代码:

_Mapper.Map<SomeObject>(SomeOther);

4 个答案:

答案 0 :(得分:68)

我找到了解决方案。 React Navigation取决于react-native-gesture-handler库。在React Navigation文档的Installation部分中,它仅表示通过使用命令react-native link创建链接。这对于iOS就足够了。但是对于Android,您必须编辑MainActivity.java文件,以便手势处理程序库可以按预期工作:

import com.facebook.react.ReactActivity;
+ import com.facebook.react.ReactActivityDelegate;
+ import com.facebook.react.ReactRootView;
+ import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;

public class MainActivity extends ReactActivity {

  @Override
  protected String getMainComponentName() {
    return "Example";
  }

+  @Override
+  protected ReactActivityDelegate createReactActivityDelegate() {
+    return new ReactActivityDelegate(this, getMainComponentName()) {
+      @Override
+      protected ReactRootView createRootView() {
+       return new RNGestureHandlerEnabledRootView(MainActivity.this);
+      }
+    };
+  }
}

请参阅文档:https://kmagiera.github.io/react-native-gesture-handler/docs/getting-started.html

实际上,React Navigation文档中没有任何地方可以修改任何文件,因为它特定于react-native-gesture-handler而非React Navigation。我将答案保留在这里,以便对他人有所帮助。

更新:React Navigation的最新文档解决了该问题

答案 1 :(得分:-1)

React Native文档更新了此问题,您可以在下面的链接中找到名为将依赖项安装到裸React Native项目中的部分

https://reactnavigation.org/docs/en/getting-started.html#installation

答案 2 :(得分:-1)

似乎在0.61.0以上的版本中已修复,但对于较旧的版本,这对我有用。

index.js中:

. . .
import {gestureHandlerRootHOC} from 'react-native-gesture-handler';
AppRegistry.registerComponent(appName, () => gestureHandlerRootHOC(App));
. . .

答案 3 :(得分:-1)

在项目的index.js中,只需使用gestureHandlerRootHOC

import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
import { gestureHandlerRootHOC } from 'react-native-gesture-handler'

AppRegistry.registerComponent(appName, () => gestureHandlerRootHOC(App));

资源:https://github.com/react-navigation/drawer/issues/105#issuecomment-540667009