You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ListView布局条件判断异常:getItemViewType始终返回OTHER

问题排查与解决

你遇到的问题核心在于Java中字符串的比较方式错误——用==比较字符串是判断两个字符串对象的内存引用是否相同,而非内容是否一致,这就是为什么明明ID是"89"却始终返回OTHER的原因。

问题根源解析

看你这段代码:

if (m == "89") { 
    return SELF; 
} else{ 
    return OTHER; 
}

m是从messagesArrayList里取出的字符串对象,而"89"是一个新的字符串字面量,它们在内存中的引用地址并不相同,所以==的判断永远为false,自然只会走else分支。

修复方案

把字符串比较改成用equals()方法,它专门用来对比字符串的实际内容:

public int getItemViewType(int position) { 
    String m = messagesArrayList.get(position).getUsersId(); 
    // 用equals比较字符串内容,把常量放前面避免空指针
    if ("89".equals(m)) { 
        return SELF; 
    } else{ 
        return OTHER; 
    } 
}

这里把"89"放在前面调用equals(),是为了防止getUsersId()返回null时触发空指针异常,算是个小技巧。

额外排查建议

  1. 确认SELF和OTHER是你定义的合法常量(比如0和1这类整数),避免常量值错误导致布局加载异常。
  2. 可以在getItemViewType里加个日志输出,直观确认判断逻辑是否生效:
Log.d("ChatAdapter", "当前用户ID:" + m + ",匹配结果:" + ("89".equals(m) ? "SELF" : "OTHER"));

修改后就能正确识别用户ID,加载对应的聊天布局了。

内容的提问来源于stack exchange,提问作者Kevin Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:34:35