Java RecyclerView更新项';s文本和图标再次单击
我实现了一个RecyclerView,它正在填充一些记录 它正在填充约会和约会已批准和未批准状态 我实现了一个approved按钮,以便在数据库中更新该约会的approved状态,并更改该特定显示记录的图标和文本 但由于某些原因,在onclick中,当我更新文本和图标时,它不会动态更改,但对数据库的请求正在工作,因为我可以看到数据库中的更改,并且当我重新加载整个数据集时,它会适当地显示更改 这是密码Java RecyclerView更新项';s文本和图标再次单击,java,android,android-recyclerview,android-listview,onclicklistener,Java,Android,Android Recyclerview,Android Listview,Onclicklistener,我实现了一个RecyclerView,它正在填充一些记录 它正在填充约会和约会已批准和未批准状态 我实现了一个approved按钮,以便在数据库中更新该约会的approved状态,并更改该特定显示记录的图标和文本 但由于某些原因,在onclick中,当我更新文本和图标时,它不会动态更改,但对数据库的请求正在工作,因为我可以看到数据库中的更改,并且当我重新加载整个数据集时,它会适当地显示更改 这是密码 @Override public void onBindViewHolder(final
@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);
}
mOnClickListenr.a预约(预约,职位)正在执行,因此我知道setText和setImageResource也在执行,但由于某些原因,视图中没有显示更改
如您所见,我使用的是notifyDataSetChanged()代码>正确。
这种行为的原因可能是什么
正如你所看到的,即使我点击imageButton,也没有动态变化
只有在重新加载arraylist时,它才会显示更改的内容,这意味着数据库中正在发生更改,而onclick正在执行
当您调用notifiyDataSetChanged
时,您必须在约会上设置approved,因为它正在重新绑定所有视图,约会仍然标记为unapproved
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);
}
});
保存到数据库的位置?状态值已更改的约会我不知道在notifyDatasetChanged()上,整个列表正在重新生成,因此在onClick中所做的更改正在撤消。您还可以调用notifiyItemChanged(holder.adapterPosition)
,它只会刷新一个项目。谢谢,我也会尝试,这似乎是一个更有效的想法