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

Art*_*tin 3 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Ven*_*247 5

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

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

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