因此,我有了此代码(已更新以获取解决方案).
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
final Direction d = directions.get(position);
if (d != null) {
TextView direction = (TextView) row.getTag(R.id.directionTextView);
TextView departure1 = (TextView) row.getTag(R.id.departure1);
TextView departure2 = (TextView) row.getTag(R.id.departure2);
TextView departure3 = (TextView) row.getTag(R.id.departure3);
direction.setText(d.getName());
if (d.getTimeStamps().size() == 0) {
departure1.setText(R.string.nodepartures);
departure1.setTextColor(R.color.grey);
} else {
for (int i = 0; i < d.getTimeStamps().size(); i++) {
switch (i) {
case 0:
departure1.setText(d.getTimeStamps().get(i));
break;
case 1:
departure2.setText(d.getTimeStamps().get(i));
break;
case 2:
departure3.setText(d.getTimeStamps().get(i));
break;
default:
break;
}
}
}
}
return row;
}
}
我遇到的问题是,当TextViews不应显示时,它会变成灰色.我尝试通过始终将文本再次设置为黑色来修复它,但这使其中的每一个变为灰色.直到我尝试:
setTextColor(context.getResources().getColor(R.color.black));
而不只是
setTextColor(R.color.black);
不知道为什么在设置文本灰色时后者起作用,但是确实如此.我想我只是有点弱智. 🙂
最佳答案
AsLanFromNarnia处在正确的轨道上. ListView回收其子视图.您永远不能假定convertView的类型处于任何默认状态.每次调用getView时设置每个相关字段.在您的情况下,这意味着在设置文本时设置文本颜色.
还有另一种处理此类情况的方法,您希望拥有异构列表:使用视图类型.您的适配器可以返回getViewTypeCount的类型数,然后从getItemViewType报告每个项目的类型.如果这样做,您将始终获得一个传递给适当类型的getView方法的convertView,从而无需每次都更改静态布局.
点击查看更多相关文章
转载注明原文:java-同时输入if AND else语句? - 乐贴网