Реагировать с навигацией: не работает пролистывание ящика в Android

Я долго искал решение, но, что удивительно, я думаю, что никто еще не сталкивался с этим. Итак, я публикую это.

Я создал простой Навигатор Ящиков с React Navigation V3. Я добавил значок меню, и когда я щелкаю по нему, ящик появляется, как и должно быть. Но никакой жест рукой не работает. Смахивание слева направо ничего не делает. Даже когда ящик открыт, постукивание по пустому месту не закрывает ящик.

Вот мой код:

import {
    createStackNavigator,
    createSwitchNavigator,
    createAppContainer,
    createDrawerNavigator
} from 'react-navigation';
import Home from './screens/Home';
import LoginForm from './screens/LoginForm';
import Articles from './screens/Articles';

const AuthStack = createStackNavigator({
    LoginScreen: LoginForm
});

const AppStack = createDrawerNavigator({
    HomeScreen: Home,
    ArticlesScreen: Articles
});

const RootNavigator = createSwitchNavigator(
    {
        Auth: AuthStack,
        App: AppStack
    },
    {
        initialRouteName: 'Auth'
    }
);

export default createAppContainer(RootNavigator);

Ответы

Ответ 1

Я нашел решение. React Navigation зависит от библиотеки react-native-gesture-handler. В разделе "Установка" документации React Navigation говорится только о создании ссылки с помощью команды 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 решают эту проблему

Ответ 2

кто-то сталкивался с этой проблемой в реагирующей навигации v4?