【问题标题】:RecyclerView update item's text and icon OnClickRecyclerView 更新项目的文字和图标 OnClick
【发布时间】:2019-03-08 17:25:24
【问题描述】:

我实现了一个 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);

}

OnClcick 中的mOnClickListenr.aprove_appointment(appointment, position); 正在执行,所以我知道 setText 和 setImageResource 也在执行,但由于某种原因,视图中没有显示。

如您所见,我正在正确使用notifyDataSetChanged();。 这种行为的原因可能是什么?

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

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

【问题讨论】:

  • 你在哪里保存到数据库?
  • 已更改approved_status 值的约会

标签: java android android-recyclerview android-listview onclicklistener


【解决方案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);
        }
    });

【讨论】:

  • 我不知道在 notifyDatasetChanged() 上整个列表正在重新生成,因此在 onClick 中所做的更改正在撤消
  • 你也可以调用notifiyItemChanged(holder.adapterPosition),它只会刷新一项。
  • 谢谢会尝试这似乎是更有效的想法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多