如何在recyclerview上停止物品发抖?

时间:2019-06-13 23:29:01

标签: android android-recyclerview recycler-adapter

我已经使用 显示在片段上的recyclerview,当我单击该项目时,它将在数据库上写入一个值,然后根据绿色“通知铃”出现/消失的情况,这里的问题是所有项目都受到颤抖效果的影响

图片: https://im4.ezgif.com/tmp/ezgif-4-1adb4a5b29e3.gif

我的适配器

public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
NotifsRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.child(currentUserID).child("comments").child(delUid).hasChild("state"))
                {
                    String state = dataSnapshot.child(currentUserID).child("comments").child(delUid).child("state").getValue().toString();
                    if (state.equals("unread"))
                    {
                        holder.notifImg.setVisibility(View.VISIBLE);
                    }
                    else {
                        holder.notifImg.setVisibility(View.GONE);
                    }}}
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {         NotifsRef.child(currentUserID).child("comments").child(delUid).child("state").setValue("read");              
            }
        });
    }


    @Override
    public int getItemCount() {
        return mNotifications.size();
    }

片段:

{
OnCreate{...}

notificationList = (RecyclerView) notificationFragmentView.findViewById(R.id.notifications_list);

        notificationAdapter = new NotificationAdapter(getContext(), mNotifications);
        notificationList.setAdapter(notificationAdapter);
        notificationList.setHasFixedSize(true);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
        linearLayoutManager.setReverseLayout(true);
        linearLayoutManager.setStackFromEnd(true);
        notificationList.setLayoutManager(linearLayoutManager);
}

private void readMsgList()
    {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Notifications");

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot)
            { mNotifications.clear();
                for (DataSnapshot snapshot : dataSnapshot.child(currentUserID).child("comments").getChildren())
                {
                    Notifications notifications = snapshot.getValue(Notifications.class);
                        mNotifications.add(notifications);
                }
                notificationAdapter.notifyDataSetChanged();
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
}});
    }

我试图将侦听器从ValueEventListener更改为SingleValueEventListener,但没有任何结果。 有什么办法可以纠正这个问题?

0 个答案:

没有答案