RecyclerView notifyItemMoved()复制移动的视图

时间:2019-07-01 21:01:24

标签: java android android-recyclerview

我正在将回收器视图中的选定视图从其任何位置移动到位置0(recyclerview的顶部)。但是问题在于,当物品移动时,它会重复自身,这意味着它在顶部以及之前的位置该如何消除?

我尝试使用scrollToPosiotion()函数滚动itemview,但是它不起作用。现在,窗体notifyItemMoved()确实移到顶部,但是重复了,当我关闭并重新打开该应用程序时,重复的视图只删除顶部的显示。

MssgRef = FirebaseDatabase.getInstance().getReference().child("Messages").child(currentUserID).child(userIDs);

                    MssgRef.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if(dataSnapshot==null)return;
                            int unread = 0;
                            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                                Messages messages = snapshot.getValue(Messages.class);
                                if (messages.getReceiver().equals(currentUserID)&& messages.getSender().equals(userIDs) && !messages.isIsseen()){
                                    unread++;
                                }
                            }
                            if (unread != 0){
                                holder.unread.setVisibility(View.VISIBLE);
                                //move to the top
                                notifyItemMoved(holder.getAdapterPosition(),0);
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

我希望该项目在不关闭并重新打开应用程序的情况下不会重复自身。

1 个答案:

答案 0 :(得分:0)

您不仅可以将项目移到回收站视图中,还可以移入列表中。

尝试一下

yourList.remove(holder.getAdapterPosition());
yourList.add(0, yourData);
adapter.notifyItemMoved(holder.getAdapterPosition(),0);