Жесты смахивания MaterialTopTabs заблокированы вложенным FlatList на AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Жесты смахивания MaterialTopTabs заблокированы вложенным FlatList на Android

Сообщение Anonymous »

Я работаю над приложением React Native со специальной структурой навигации, включающей экран чата, вложенный в несколько навигаторов. Корнем является MaterialTopTabNavigator, который содержит BottomTabNavigator, а внутри этой нижней вкладки находится фактический экран с FlatList для сообщений. Проблема, с которой я столкнулся, специфична для Android: жесты горизонтального смахивания для переключения между верхними вкладками полностью терпят неудачу, если жест начинается над областью FlatList.
На iOS все работает отлично, но на Android создается впечатление, что FlatList агрессивно поглощает все события касания, даже горизонтальные, и не позволяет им всплывать в родительский PagerView. вертикальная прокрутка работает нормально, и если я проведу пальцем по заголовку или за пределы списка, вкладка переключается правильно.
Вот моя текущая настройка (упрощенная):
  • Корневой навигатор (верхние вкладки)

    Код: Выделить всё

    const TopTab = createMaterialTopTabNavigator();
    
    export const DetailTaskNavigator = () => {
    return (
    // swipeEnabled is definitely true
    
    
    {/* the issue is inside this tab which contains the bottom nav */}
    
    
    
    );
    };
    
  • Вложенный навигатор (нижние вкладки)
    Я подозреваю, что дополнительная вложенность может быть частью проблемы.

    Код: Выделить всё

    const BottomTab = createBottomTabNavigator();
    
    export const ChatTabNavigator = () => {
    return (
    
    
    {/* other screens... */}
    
    );
    };
    
  • Экран чата

    Код: Выделить всё

    export const MessageSection = () => {
    return (
    
    
    
    
    
    
    
    );
    };
    
Что я пытался до сих пор отладить:
  • переключение между реагирующим FlatList и реагирующим нативным-жест-обработчиком FlatList. ни один из них не исправил пролистывание.
  • гарантировалось, что flex: 1 присутствует в каждом родительском контейнере, чтобы избежать проблем с нулевой высотой.
  • проверено android:windowSoftInputMode="adjustResize" в манифесте.
  • пробовал использовать SimulficientHandlers, но это сложно, поскольку PagerView скрыт внутри реакции-навигации библиотека.
ENV:
  • react-native: 0.80.2
  • react-navigation/material-top-tabs: 7.4.9
  • pager-view: 6.9.1
Кто-нибудь сталкивался с этим конкретный конфликт со списками и вложенными навигаторами на Android? Есть ли способ заставить список передавать горизонтальные жесты вверх?

Подробнее здесь: https://stackoverflow.com/questions/798 ... on-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»