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时触发空指针异常,算是个小技巧。
额外排查建议
- 确认
SELF和OTHER是你定义的合法常量(比如0和1这类整数),避免常量值错误导致布局加载异常。 - 可以在
getItemViewType里加个日志输出,直观确认判断逻辑是否生效:
Log.d("ChatAdapter", "当前用户ID:" + m + ",匹配结果:" + ("89".equals(m) ? "SELF" : "OTHER"));
修改后就能正确识别用户ID,加载对应的聊天布局了。
内容的提问来源于stack exchange,提问作者Kevin Lee
相关产品推荐
相关产品推荐

