java - 如何使用 firebase 实时数据库在回收站 View 上使用拖放

标签 java android firebase-realtime-database

我正在尝试将拖放功能实现到 firebase 回收器 View 。此实现的文档中没有足够的信息。我假设我必须使用 onchildmoved 作为事件监听器,但我不知道如何重新排序数据。

最佳答案

我在尝试让它在 Firebase UI 3.1.0 上为自己工作时遇到了很多困惑。这是我最终的工作解决方案(下面的解释):

// overrides from ItemTouchHelper
override fun onMove(recyclerView: RecyclerView,
                viewHolder: RecyclerView.ViewHolder,
                target: RecyclerView.ViewHolder): Boolean {
    val fromPos = viewHolder.adapterPosition
    val toPos = target.adapterPosition

    val fromSnapshot = snapshots.first { it.order == fromPos }
    val toSnapshot = snapshots.first { it.order == toPos }

    Logger.d("Habit ${fromSnapshot.name} (${fromSnapshot.order}) to $toPos")
    Logger.d("Habit ${toSnapshot.name} (${toSnapshot.order}) to $fromPos")
    fromSnapshot.order = toPos
    toSnapshot.order = fromPos

    hasDragged = true

    notifyItemMoved(toPos, fromPos)
    return true
}
// overrides from FirebaseRecyclerAdapter
override fun onChildChanged(type: ChangeEventType?, snapshot: DataSnapshot?, newIndex: Int, oldIndex: Int) {
    when (type) {
        ChangeEventType.MOVED -> if (!hasDragged) {
            super.onChildChanged(type, snapshot, newIndex, oldIndex)
        }
        else -> super.onChildChanged(type, snapshot, newIndex, oldIndex)
    }
}

override fun onDataChanged() {
    hasDragged = false
}

我可能做错了什么,但似乎this answer above上面的代码重复了工作,因为 FirebaseRecyclerAdapter 和可观察的快照将根据通知自动更新。这导致拖动以新值突然结束。我还通过使用 getSnapshots().get(pos)(kotlin 中的 snapshots[fromPos])得到了错误的订单号(可能是我的错)。这导致了一些非常奇怪的动画。此外,在移动中通知时,我必须反转到/从(目标/viewHolder)位置。但是,请注意,这确实依赖于使用 order 字段在查询中进行排序。最后,如果是因为用户拖动,我不想让 FirebaseRecyclerAdapter#onChildChanged 方法调用,这也会导致不需要的动画和重复工作。

关于java - 如何使用 firebase 实时数据库在回收站 View 上使用拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38084812/

相关文章:

java - 在 Java 中读取输入文件并写入输出文件

java - 使用 Apache HttpClient API 的 Wpad 文件进行代理设置

android - Kindle Fire 运行软件版本 6.3.2 的 android minSdkVersion 是什么?

mongodb - 您可以将 MongoDB 与 Firebase 托管一起使用吗?

android - 从 Firebase 数据库中获取数据时如何显示加载消息?

android - 读取数据时 Firebase 权限被拒绝

java - 从 dv 摄像机进行实时 RTMP 流传输的最佳方式

java - Firebase 服务器 sdk 是否适用于 Google Appengine Java

android - 设置 Android Gallery 小部件以显示特定的起始图像

android - 在 Unity3D 中使用 Facebook API 从 iOS/Android 将图像分享到 Facebook