RecyclerView обновить текст элемента и значок OnClick - PullRequest
0 голосов
/ 08 марта 2019

Я реализовал 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);

}

mOnClickListenr.aprove_appointment(appointment, position); внутри OnClcick выполняется, поэтому я знаю, что setText и setImageResource также выполняются, но по какой-то причине изменения не отображаются в представлении.

Как видите, я правильно использую notifyDataSetChanged();. Что может быть причиной такого поведения?

image

Как вы можете видеть, даже когда я нажимаю на кнопку изображения, нет динамического изменения

только когда я перезагружаю arraylist, он показывает изменения, что означает, что изменения происходят в базе данных, и onclick выполняет

Image2

1 Ответ

1 голос
/ 08 марта 2019

Необходимо установить утвержденный на 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);
        }
    });
...