if子句在Android的onBindViewHolder中无法正常工作

时间:2018-08-22 08:51:38

标签: android android-recyclerview

我有一个RecyclerView,它列出了服务器中的数据,并且必须根据情况以不同的方式显示每一行数据。 我的数据是票证消息列表。 如果消息是从用户发送的,则其背景必须为灰色,如果是来自代理的,则必须为蓝色。 此外,如果此邮件带有附件,则必须显示下载图标。 这是我的适配器代码:

    @Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    if (holder.getItemViewType() == 0) {
        holder.itemView.setBackgroundResource(R.drawable.radius_background_gray);
        holder.ticketDate.setBackgroundResource(R.drawable.radius_background_light_gray);
    }
    if(ticket.get(position).getAttachment() != null)
        holder.ticketStatus.setImageResource(R.drawable.ic_attachment_black_24dp);

    holder.ticketTitle.setText(ticket.get(position).getAgentName() + " said :");

}

@Override
public int getItemViewType(int position) {
    if(ticket.get(position).getDirection().equals("out"))
        return 0;
    else return 1;
}

颜色设置正确,但是当我使用if子句为附件设置imageView时,没有附件且为null的消息显示该附件图标! 我是否还应该在getItemType中而不是在onBindViewHolder中检查此条件?

2 个答案:

答案 0 :(得分:2)

我可以告诉您,在使用RecyclerView的实践中,最好在if中包含一个else子句。

例如,在您的情况下,您可以执行以下操作:

if(ticket.get(position).getAttachment() != null)
    holder.ticketStatus.setImageResource(R.drawable.ic_attachment_black_24dp);
else
    holder.ticketStatus.setVisibility(View.GONE);

答案 1 :(得分:0)

         if (getItemViewType(position) == 0) {
            holder.itemView.setBackgroundResource(R.drawable.radius_background_gray);
            holder.ticketDate.setBackgroundResource(R.drawable.radius_background_light_gray);
        }

请尝试这个。