FirebaseRecyclerAdapter 在更新时使我的行闪烁

FirebaseRecyclerAdapter blinks my row when it's updated

我正在使用 Firebase 创建一个聊天应用程序。我正在使用来自 firebase-ui 的 recycleViewFirebaseRecyclerAdapter 来显示所有消息。我的问题是当有人喜欢一条消息(如下所示)时,整个布局都会闪烁。如果我也更改 Firebase 控制台上的消息,就会发生这种情况。在我的视图持有者中,我只根据我的模型更新心脏图像视图。我使用的是 0.6.2 版,但它仍然发生在 1.0.0 上。

关于我的适配器,我扩展了 FirebaseRecyclerAdapter 并且因为我正在使用 viewTypes 我已经覆盖了以下方法:

class ChatMessageOutViewHolder extends RecyclerView.ViewHolder {

    @BindView(R.id.message_out_content)
    TextView messengerView;

    @BindView(R.id.message_out_heart)
    ImageView heartView;

    @BindView(R.id.message_out_heart_likes)
    TextView likesView;

    @BindView(R.id.message_out_time)
    TextView timeView;

    ChatMessageOutViewHolder(View v) {
        super(v);
        ButterKnife.bind(this, v);
    }

    void apply(final ChatMessage model) {
        messengerView.setText(model.content);
        likesView.setText(model.likes == null ? "" : String.valueOf(model.likes.size()));

        Drawable image = ContextCompat.getDrawable(mContext, R.drawable.ic_fav_1);
        if (model.likes != null && model.likes.contains(mUserId)) {
            image = ContextCompat.getDrawable(mContext, R.drawable.ic_fav_2);
        }

        heartView.setImageDrawable(image);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm", Locale.getDefault());
        timeView.setText(simpleDateFormat.format(new Date(model.getTimeStamp())));

        heartView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mListener != null) {
                    mListener.onHeartClick(model);
                }
            }
        });
    }
}

我明白了!!这不是 FirebaseRecyclerAdapter 上的错误。这听起来像是 RecyclerView 的默认行为。要解决它,只需在设置我的本地参考后添加以下行。

RecyclerView.ItemAnimator animator = mRecyclerView.getItemAnimator();
if (animator instanceof SimpleItemAnimator) {
    ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
}