我实现了一个RecyclerView,它正在填充一些记录 它正在填充约会,并且约会具有已批准和未批准状态。
我实现了一个批准按钮,以便在数据库上更新该约会的批准状态,并更改显示的特定记录的图标和文本。
但是由于onclick上的某些原因,当我更新文本和图标时,它并没有动态变化,但是对数据库的请求正在工作,因为我可以看到数据库中的更改,并且当我重新加载整个数据集时,它会显示进行适当的更改。
这是代码
@Override
public void onBindViewHolder(final AppointmentsHolder holder, final int position) {
final AppointmentObject appointment = appointmentList.get(position);
//binding the data with the viewholder views
holder.patient_name.setText(appointment.patient_name);
holder.app_date.setText(appointment.appointment_date);
if (appointment.descr.length() > 30){
holder.app_descr.setText(String.valueOf(appointment.descr.substring(0,30)));
}else {
holder.app_descr.setText(String.valueOf(appointment.descr));
}
if (appointment.approved_status.equals("0")){
holder.approved_status.setTextColor(Color.RED);
holder.approved_status.setText("Not Approved");
holder.app_pa_approve.setImageResource(R.mipmap.approveicon);
}else {
holder.app_pa_approve.setImageResource(R.mipmap.approvedicon);
holder.approved_status.setTextColor(Color.GREEN);
holder.approved_status.setText("Approved");
}
holder.app_pa_relative.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnClickListenr.clicked_On_appointment(appointment);
}
});
holder.app_pa_approve.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.approved_status.setTextColor(Color.GREEN);
holder.approved_status.setText("Approved");
holder.app_pa_approve.setImageResource(R.mipmap.approvedicon);
notifyDataSetChanged();
mOnClickListenr.aprove_appointment(appointment, position);
}
});
}
这里是onBindViewHolder,我试图在其中动态更改onclick的数据。
mOnclickListiner.aprove.appointment 只是我在活动中实现的将数据传递到活动的侦听器
public interface OnClickListener{
public void clicked_On_appointment(AppointmentObject appointment);
public void aprove_appointment(AppointmentObject appointment, int position);
}
OnClcick内部的mOnClickListenr.aprove_appointment(appointment, position);
正在执行,所以我知道setText和setImageResource也正在执行,但是由于某种原因导致视图中未显示。
您可以看到我正在正确使用notifyDataSetChanged();
。
这种行为可能是什么原因?
您可以看到,即使我单击imageButton时也没有动态变化
仅当我重新加载arraylist时,它才会显示更改,这意味着更改正在数据库中并且onclick正在执行
答案 0 :(得分:1)
您必须在appointment
上设置批准,当您调用notifiyDataSetChanged
时,它将重新绑定所有视图,并且约会仍被标记为未批准
holder.app_pa_approve.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appointment.setApprovedStatus(1);
holder.approved_status.setTextColor(Color.GREEN);
holder.approved_status.setText("Approved");
holder.app_pa_approve.setImageResource(R.mipmap.approvedicon);
notifyDataSetChanged();
mOnClickListenr.aprove_appointment(appointment, position);
}
});