RecyclerView更新项目的文本和图标OnClick

问题描述 投票:0回答:1

我实施了一个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。

OnclickListener.approve.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();。可能是这种行为的原因是什么?

Image

正如你所看到的,即使我点击图像按钮也没有动态变化

只有当我重新加载arraylist时它才显示已更改,这意味着更改正在数据库中发生并且onclick正在执行

Image2

java android android-recyclerview android-listview onclicklistener
1个回答
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);
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.