我正在编写一个检查我们的'webservice'并返回'托管'或'非托管'状态的应用程序,我在列表视图中保留一个正在运行的搜索历史记录(直到用户清除它),这一切都正常。< / p>
我想做的是,如果状态为“管理”,我希望单个textview项为绿色,如果是'Unmanaged',我希望单个项目为红色。
//This is the String Array which gets populated later.
ArrayList<String> _searchHistoryList = new ArrayList<String>();
//Here is where I override the getView to try to change the color.
listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, _searchHistoryList) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getView(position, convertView, parent);
String _currentStatus = appSettings.getString("current_status", "na");
int textColor;
if (_currentStatus.equals("Managed")){
textColor = R.color.green_text;
} else {
textColor = R.color.red_text;
}
textView.setTextColor(getResources().getColor(textColor));
return textView;
}
};
lvSearchHistory.setAdapter(listAdapter);
上面的代码实际上将整个列表视图转换为最后一个搜索项的颜色。 (例如,如果最后一次搜索产生“管理”结果 - 整个项目列表变为绿色,而不仅仅是单个项目。)
任何人都可以指出我正确的方向。
答案 0 :(得分:2)
在我看来,问题来源就是这个电话:
String _currentStatus = appSettings.getString("current_status", "na");
此调用中没有任何内容表明您正在检查哪个列表元素,因此它将始终为列表中的每个视图返回相同的结果。您应该传入position参数并使用它来获取相关列表条目的状态(如何执行此操作取决于您实际获取列表元素的状态,但这不应该太难)。
答案 1 :(得分:1)
尝试以下代码
if (_currentStatus.equals("Managed")){
textView.setTextColor(0xFF008B45);
} else {
textView.setTextColor(0xFFB0171F);
}
答案 2 :(得分:0)
尝试以下代码:
int textColor;
if (_currentStatus.equals("Managed")){
textColor = R.color.green_text;
textView.setTextColor(getResources().getColor(textColor));
} else {
textColor = R.color.red_text;
textView.setTextColor(getResources().getColor(textColor));
}
return textView;