如果ViewHolder的语句每次都返回false

时间:2015-10-27 13:41:00

标签: android if-statement android-viewholder

回到另一个Android问题,感觉好像我在这里错过了一些简单的东西。

视图持有者获取表格的特定字段中的内容,从中读取结果。

现在我想将结果与char进行比较以更改其所在布局的颜色,但不幸的是,它没有按计划运行。

以下是持有人的代码:

@Override
public void bindView(View view, Context context, Cursor cursor) {
    super.bindView(view, context, cursor);
    ViewHolder holder = (ViewHolder) view.getTag();
    if (holder == null) {
        holder = new ViewHolder();
        holder.colImp = cursor.getColumnIndexOrThrow(BetDbAdapter.COL_OUTCOME);
        holder.listTab = view.findViewById(R.id.won_lost);
        view.setTag(holder);
    }
    if (cursor.getString(holder.colImp).trim() == "W" || cursor.getString(holder.colImp).trim() == "w") {
        holder.listTab.setBackgroundColor(context.getResources().getColor(R.color.green));
    } else {
        holder.listTab.setBackgroundColor(context.getResources().getColor(R.color.red));
    }
}

即使内容是“W”,if语句也会一直返回红色,这里是应用程序的屏幕:

screen

这也就是插入,目前它是硬编码的,用于测试目的:

mDbAdapter.createBet("W", 12.34, 14.78);
mDbAdapter.createBet("W", 23.77, 1.90);
mDbAdapter.createBet("W", 123.45, 134);
mDbAdapter.createBet("W", 0.4, 1.34);

请看看你能否看到我无法解决的问题。

3 个答案:

答案 0 :(得分:1)

问题在于

cursor.getString(holder.colImp).trim() == "W" || cursor.getString(holder.colImp).trim() == "w"

==等式仅适用于原始值,或检查对象是否相同reference。 请尝试以下

cursor.getString(holder.colImp).trim().equalsIgnoreCase("W")

答案 1 :(得分:0)

String是一个Object,所以相等比较器只是测试引用而不是值。

要测试字符串相等性,您应该使用

cursor.getString(holder.colImp).trim().equal("W");

答案 2 :(得分:0)

您正在比较代码中的字符串,而不是字符。 Char - ' W'。字符串 - " W"

如果你需要比较字符:

cursor.getString(holder.colImp).trim().charAt(0) == 'W'

但更容易比较字符串

"W".equals(otherString);