当前位置: 首页 > 知识库问答 >
问题:

如果子句不能在onBindViewHolder Android中正常工作

羊光辉
2023-03-14

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

    @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子句设置图像查看附件时,没有附件且为空的邮件将显示该附件图标!我是否也应该在 getItemType 中检查此条件,而不是在 onBindViewHolder 中检查此条件?

共有3个答案

窦志新
2023-03-14

我通过在getItemType()中检查我的条件来解决我的问题

江浩慨
2023-03-14
         if (getItemViewType(position) == 0) {
            holder.itemView.setBackgroundResource(R.drawable.radius_background_gray);
            holder.ticketDate.setBackgroundResource(R.drawable.radius_background_light_gray);
        }

请尝试这个。

黄磊
2023-03-14

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

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

if(ticket.get(position).getAttachment() != null)
    holder.ticketStatus.setImageResource(R.drawable.ic_attachment_black_24dp);
else
    holder.ticketStatus.setVisibility(View.GONE);
 类似资料:
  • 我有一个问题。我写了代码,需要指出数组的元素比数组的下一个元素大。您可以在输出图片上看到数组$arr应该只包含元素70,因为

  • 我对c不熟悉,我正试图解决Bjarne Stroustrup的书《编程原则和实践使用C》第四章中的练习6,但不明白为什么我的代码不起作用。 演习: 制作一个保持十个字符串值“零”、“一”、......、“九”的向量。在将一个数字转换为相应的拼写值的程序中使用它:例如,输入7给出输出7。有相同的程序,使用相同的输入回路,将拼写出来的数字转换成它们的数字形式;例如,输入7给出输出7。 我的循环只对一个

  • 我正在处理碎片,所以在我的视图寻呼机中有三个碎片 因此,我在第一个片段中使用了方法,所以当我从一个片段切换到另一个片段并返回到第一个片段时,我的方法不起作用 所以有人给出解决方案吗

  • 我正试图在按下某个按钮时弹出一个警报对话框。我首先使用了Android Developer的示例代码而不是'这不起作用,所以我根据在这个站点上发现的情况进行了更改,但是现在我的程序在按下按钮后被迫停止。 就你的知识而言,这是在第二个不同于主要的活动中完成的。不确定这是否重要.... ‘ 碰撞日志:“03-25 19:34:24.373:E/AndroidRuntime(18828):致命异常:ma

  • 2,错误{org.apache.directory.server.LDAP.ldapserver}-ERR_171无法将LDAP服务(10,389)绑定到服务注册表。java.net.BindException:已在使用的地址 请帮忙谢谢 --------提示------------------- JAVA_HOME环境变量设置为/opt/java CARBON_HOME环境变量设置为/mnt/1

  • 我正在做一个类似生存的游戏,我有两种类型的碰撞,一种是玩家的敌人,另一种是敌人身上的子弹。我也有一个健康栏,由于某些原因,在picbox被移除后,健康仍然下降,就像敌人与玩家互动一样。 这是子弹碰撞代码的一个块(所有8个方向的所有代码都是相同的) 这是敌方与玩家碰撞的暗号