我正在使用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);
}
答案 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);
}
一切都应该像你期望的那样工作