java - RecyclerView 更新项目的文字和图标 OnClick
问题描述
我实现了一个 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。
mOnclickListiner.aprove.appointment 只是我在活动中实现以将数据传递给活动的监听器
public interface OnClickListener{
public void clicked_On_appointment(AppointmentObject appointment);
public void aprove_appointment(AppointmentObject appointment, int position);
}
OnClcickmOnClickListenr.aprove_appointment(appointment, position);
内部正在执行,所以我知道 setText 和 setImageResource 也在执行,但由于某种原因,视图中没有显示。
如您所见,我使用notifyDataSetChanged();
正确。这种行为的原因可能是什么?
如您所见,即使我单击 imageButton 也没有动态变化
只有当我重新加载arraylist时它才会显示更改,这意味着数据库中正在发生更改并且onclick正在执行
解决方案
您必须设置已批准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);
}
});
推荐阅读
- javascript - 将 Adsense 代码添加到 header.php 后,WordPress css 未加载
- c++ - 如何使用 OpenMP 并行化这个循环?
- node.js - 使用 Mongoose 动态更新子文档中的数组
- javascript - 将分组对象数组平均分成两个
- ruby-on-rails - Rails 属于 with 包括无法识别的二阶关联
- python - 在列表字典中查找重复的字母
- php - 我会在控制器中使用 self、static、this
- spring-data - 为什么扩展 2 个其他 repo 接口的 repo 接口没有连接到控制器中?
- javascript - 如何使用 jquery 在新标签中包装与强标签同级的字符串?
- operating-system - 在上下文切换中将 CPU 分配给另一个进程究竟意味着什么?