簡體   English   中英

RecyclerView更新項目的文本和圖標OnClick

[英]RecyclerView update item's text and icon OnClick

我實現了一個RecyclerView,它正在填充一些記錄。它正在填充約會以及約會已批准和未批准狀態。

我實現了一個批准的按鈕,以便onclick在數據庫上更新該約會的批准狀態,並且還更改了該特定顯示記錄的圖標和文本。

但是由於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);

}

mOnClickListenr.aprove_appointment(appointment, position); OnClcick內部正在執行,所以我知道setText和setImageResource也正在執行,但是由於某種原因未在視圖中顯示。

如您所見,我正在使用notifyDataSetChanged(); 正常。 此行為可能是什么原因?

圖片

如您所見,即使當我單擊imageButton時也沒有動態變化

僅當我重新加載arraylist時,它顯示更改,這意味着更改正在數據庫中並且onclick正在執行

鏡像2

您必須在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);
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM