android - FirebaseRecyclerAdapter 更新时会闪烁我的行

标签 android firebase firebase-realtime-database firebaseui

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

关于我的适配器,我扩展了 FirebaseRecyclerAdapter,并且因为我使用的是 viewTypes,所以我重写了以下方法:

  • 获取ItemViewType
  • 填充ViewHolder
  • 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);
                }
            }
        });
    }
}

最佳答案

我明白了!!这不是 FirebaseRecyclerAdapter 上的错误。这听起来像是 RecyclerView 的默认行为。要解决此问题,只需在设置本地引用后添加以下行即可。

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

关于android - FirebaseRecyclerAdapter 更新时会闪烁我的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444102/

相关文章:

java - Android 在 ListPreference 上崩溃

firebase - Flutter/Dart/Firestore : How can I add a list of maps to firebase?

android - 更新多个 Firebase 节点

python - 如何在 Python 中将文档 ID 添加到 firestore 文档

android - 找不到 com.google.android.gms.internal.zu 的类文件

android - 如果存在多个重复值,如何显示单个值?

android - 将项目添加到 Firebase 数据库中的列表

java - 我如何使用 android 的 getResources

Android Google Sheets API update() 特定工作表

android - 大量 TextView 会影响性能吗?我应该切换到 ListView 而不是使用 Scrollview 吗?