问题描述
我正在尝试读取呼叫日志应用程序,正在使用呼叫类型将呼叫类型更改为未接听的来话,我想根据此更改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()));
}