在拖动后,如何将项目位置存储在循环范围内



我有一个简单的待办事项列表应用,带有recyclerview/firestoreRecyCyclerAdapter/itemTouchhelper,带有项目A,B,C,D的项目(请参阅图片附加(。现在,我想有效地将这些物品的位置存储在Firestore中,最初是当我添加一个项目时,并且每当我垂直拖动时,放他们。我该如何进行构想或现有/示例代码进行操作。将其存储在云中很重要,因此如果我从另一个设备上看一下,则项目位置保持不变。

关于它的一些想法:适配器位置(INT(从0开始(在这种情况下为D(。当我添加项目E时,则具有适配器位置0,所有其他项目的位置会发生变化。因此,每次添加新项目将显示在顶部时,在Firestore中存储的位置可能会增加1。但是,如果我有项目(例如,在照片库应用程序中(该怎么办。如果我每次拖动&放下项目?

我想这应该是一个非常普遍的问题。

我的todo应用程序(https://i.stack.imgur.com/o3jj1.jpg(

这是我的Method itemTouchhelper.callback onmoved((的代码:

@Override
        public void onMoved(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, int fromPos, @NonNull RecyclerView.ViewHolder target, int toPos, int x, int y) {
            super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y);
            for (int maxItems = recyclerView.getChildCount(), i = 0; i < maxItems; ++i) {
                RecyclerView.ViewHolder holder = recyclerView.getChildViewHolder(recyclerView.getChildAt(i));
                int layoutPosition = holder.getLayoutPosition();
                int adapterPosition = holder.getAdapterPosition();
                TodoAdapter.TodoHolder h =  (TodoAdapter.TodoHolder)holder;
                String documentID = h.getDocumentID();
                TextView textViewTitle = (TextView)h.itemView.findViewById(R.id.todo_title);
                CharSequence title = textViewTitle.getText();
                DocumentReference docRef = mFirestore.collection("todos").document(documentID);
                docRef.update("position", adapterPosition);
            }
        }

现在,我想有效地将这些物品的位置存储在Firestore中,最初是当我添加一个项目时,并且每当我垂直拖动&amp;放下它们。

虽然从技术上讲这是可能的,但我认为Firestore并不是该问题的最佳选择,因为Firestore的所有内容都大约是阅读和写入的数量。因此,每次更改项目的位置时,您都会经历许多等于其余项目数量的写操作。也尝试查看Firebase实时数据库。两者都很好地工作。

我该如何在概念上做

只需为每个元素添加订单号属性,代表列表中的位置,然后根据该属性订购(上升或下降(。一旦将元素从一个位置移到另一个位置,就会将每个剩余的OBEJCT的位置更新一个。

将其存储在云中很重要,因此如果我从另一个设备上看一下,物品位置保持不变。

如果您将所有元素保持订购,则每个用户都可以看到相同的安排。

因此,每次添加新项目时,Firestore中存储的位置可能应增加1个

对,每次添加新项目时,职位都会增加一个。

如果我每次拖动&amp;放下项目?

在列表开头更新项目的位置肯定是非常昂贵的。让我们举个例子。假设您有1000个项目的集合,并且要添加一个新项目作为列表中的第二个项目。这意味着您将收取一个写作操作,以添加项目以及另外999个写操作,以更新其余999个项目的位置。因此,总共您将收取1000个写操作的费用。由您决定这脚是否需要您的需求。

最新更新