3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ReactNativeドラッグアンドドロップでリストを並び替え

Last updated at Posted at 2021-02-15

目的

ReactNativeでドラッグアンドドロップでリストを並び替えることをしたい。

以下のようなライブラリがある様子。試していく。
react-native-sortable-list
react-native-draggable-flatlist
react-dnd(テーブルのソートは自分で..)

react-native-sortable-list

iOSでは良い感じに動いたが、AndroidでScrollとかぶると上手く行かない...
さらにAnimationに関して以下のwarningがでてしまう。

Animated: `useNativeDriver` was not specified. This is a required option and must be explicitly set to `true` or `false

ボツ

react-native-draggable-flatlist

# 依存ライブラリのインストール
expo install react-native-reanimated
expo install react-native-gesture-handler

# 本体
expo install react-native-draggable-flatlist

ace.gif

これはiOSでもAndroidでも、scrollしてもいい感じにうごきました。

renderItemの引数に{ item, index, drag, isActive }が渡される。
このdragを実行するとdraggableの状態になる。
サンプルや自分の実装では、ItemのonLongPressで実行しているがボタンのpressなどでも実行出来る。
またisActiveで選択状態かわかるので、スタイルを変えるとわかりやすい。

onDragEndで引数に並びが変わったあとのdataが帰ってくるので、必要な情報を保存してして、 最初のdataを差し替えればよし。

画面外へのドラッグしながらスクロールする場合は、結構遅いのであんまり長い距離はこういうのでは移動させないほうが良いかも

<DraggableFlatList
          style={styles.list}
          data={this.state.list}
          keyExtractor={(item, index) => `draggable-item-${index}`}
          renderItem={this.renderItem}
          onDragEnd={this._onDragEnd}
        />

  renderItem = ({ item, index, drag, isActive }) => {
    const activeStyle = {
      backgroundColor: isActive ? "#ffdddd" : "#fff",
      borderColor: "red",
      transform: [
        { scale: this.state.itemScale },
      ],
    };
    const dStyle = isActive ? activeStyle : []

    return (
      <TouchableOpacity style={[styles.listItem, dStyle]} onLongPress={() => this._itemOnLongPress(drag)}>
        <Text> test me{item}</Text>
      </TouchableOpacity>
    );
  };
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?