如何在ViewHolder Android Studio中设置可绘制背景?

问题描述

我正在尝试读取呼叫日志应用程序,正在使用呼叫类型将呼叫类型更改为未接听的来话,我想根据此更改img

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder,int position) {

        TextView number,duration,type,date;
        Drawable img_type,img_type_user;

        number = holder.number;
        type = holder.type;
        date = holder.date;
        duration = holder.duration;

        img_type = holder.img_type;
        img_type_user = holder.img_type_user;

        number.setText(newlistCalls.get(position).getNumber());
        type.setText(newlistCalls.get(position).getType());
        date.setText(newlistCalls.get(position).getDate());
        duration.setText(newlistCalls.get(position).getDuration());

        //set drawable

    }

    @Override
    public int getItemCount() {

        return newlistCalls.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView number,date,duration;
        Drawable img_type,img_type_user;
        public ViewHolder(View itemView) {
            super(itemView);

            number = itemView.findViewById(R.id.number);
            type = itemView.findViewById(R.id.type);
            date = itemView.findViewById(R.id.date);
            duration = itemView.findViewById(R.id.duration);

            img_type = itemView.findViewById(R.id.call_type_image).getBackground();
            img_type_user = itemView.findViewById(R.id.number_image).getBackground();

        }
    }

请帮助我这是Android Studio上的新手

解决方法

如果newlistCalls.get(position).getType()包含以下呼叫类型字符串:

  • 缺少
  • 外向
  • 传入

并且drawables中包含所有类型的图像。您可以在适配器内编写一种方法,以从drawables获取背景图像,如下所示:

private int getBackgroundImageFromCallType(String type) {
    switch (type) {
        case "missed":
            return R.drawable.ic_missed;
        case "outgoing":
            return R.drawable.ic_outgoing;
        case "incoming":
            return R.drawable.ic_incoming;
        default:
            return R.drawable.ic_call_placeholder;
    }
}

并在onBindViewHolder中使用它。

@Override
public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
    holder.number.setText(newlistCalls.get(position).getNumber());
    holder.type.setText(newlistCalls.get(position).getType());
    holder.date.setText(newlistCalls.get(position).getDate());
    holder.duration.setText(newlistCalls.get(position).getDuration());
    holder.img_type.setImageResource(getBackgroundImageFromCallType(newlistCalls.get(position).getType()));
}