FirebaseRecyclerAdapter在更新后会闪烁我的行

时间:2016-11-05 22:52:37

标签: android firebase firebase-realtime-database firebaseui

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

关于我的适配器,我延长了FirebaseRecyclerAdapter,因为我使用viewTypes我已经覆盖了以下方法:

  • getItemViewType
  • populateViewHolder
  • onCreateViewHolder

enter image description here

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);
                }
            }
        });
    }
}

1 个答案:

答案 0 :(得分:2)

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

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