Реагировать родной Flatlist Crashes на Android - PullRequest
0 голосов
/ 09 апреля 2019

Использование Flatlist приводит к сбою приложения на Android. Мой код

<ScrollView style={{ flex:1 }}>
  <View style={{
              justifyContent: "space-around"
            }}
          >
            <FlatList
              data={this.state.topSuggested}
              keyExtractor={(item, index) => index.toString()}
              numColumns={3}
              renderItem={({ item, index }) => (
                <TopTileCard
                  id={item.dish_type_id}
                  name={item.name}
                  image={item.image}
                  pieces={item["COUNT(restaurant_items.id)"]}
                  onCardClick={this.topItemClick}
                  key={index}
                />
              )}
            />
          </View>
</ScrollView>

Он рендерится только 6 раз, как и должно, но вызывает сбой приложения, когда вышеупомянутый FlatList был удален, приложение работало нормально,

Любая идея о том, почему это может произойти, я использовал FlatList для отображения более 200 элементов на других экранах моего приложения, но это приводит к сбою приложения.

Когда я запустил приложение на разных устройствах и проверил logcat, я обнаружил, что сбой происходит из-за недостатка памяти. рендеринг этой страницы по некоторым причинам занимает около 800 мегабайт оперативной памяти.

образец topSuggested

[
  {
    COUNT(restaurant_items.id):7,
    dish_type_id:21,
    image:null,
    name:"Cheese Toast",
    type:"top"
  },
  {
    COUNT(restaurant_items.id):6,
    dish_type_id:548,
    image:null,
    name:"Chicken Biryani",
    type:"top"
  }

]

В верхней части предложено шесть объектов. как выше

Буду признателен за любую помощь.

Спасибо

1 Ответ

0 голосов
/ 16 мая 2019

У меня была похожая проблема с Flatlist, который пытался отобразить большое количество элементов в некоторых старых версиях Android. У меня сработало добавление initialNumToRender prop в FlatList, попробуйте сделать его действительно низким числом, таким как 1 или 2. Это просто означает, что использование приведет к тому, что на экране появятся дополнительные элементы, что, я думаю, нормально.

В качестве альтернативы вы можете удалить ScrollView, если он вам не нужен.

...