FirebaseListAdapter在滚动时显示错误的数据

时间:2017-04-27 10:49:01

标签: android firebase firebase-realtime-database

我正在使用FirebaseListAdapter来填充ListView。它适用于直接从Firebase填充的数据。在这里,我试图根据状态字段显示/隐藏刻度图像。在初始加载时它工作正常,但是当我向上和向下滚动时,勾选标记会被错误地设置为某些其他项目。需要帮忙!这是我在populateView中的代码。

nameTextView.setText(appointment.getName());
timeTextView.setText(appointment.getTime());

if (appointment.getAppointmentStatus() == APPOINTMENT_COMPLETED) {
    appStatusImage.setImageResource(R.drawable.ic_done_black_24dp);
} else {
    appStatusImage.setVisibility(View.INVISIBLE);
}

1 个答案:

答案 0 :(得分:2)

这可能是因为您使用RecyclerView,这意味着重复使用Views而不是拥有自己的View的每个对象。换句话说,当你写:

if (appointment.getAppointmentStatus() == APPOINTMENT_COMPLETED) {
    appStatusImage.setImageResource(R.drawable.ic_done_black_24dp);
}

最初,如果视图符合您的if语句,您将使用给定的图片设置视图。但是,如果View本身被重用于不符合if语句的另一个对象,则图像资源将保留在前一个对象属性中。你应该做的是:

if (appointment.getAppointmentStatus() == APPOINTMENT_COMPLETED) {
    appStatusImage.setImageResource(R.drawable.ic_done_black_24dp);
    appStatusImage.setVisibility(View.VISIBLE);
} else {
    appStatusImage.setVisibility(View.INVISIBLE);
}

一切都应该像你期望的那样工作