Listview中的Textview文本颜色

时间:2012-10-03 02:58:49

标签: android listview colors textview android-arrayadapter

我正在编写一个检查我们的'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); 

上面的代码实际上将整个列表视图转换为最后一个搜索项的颜色。 (例如,如果最后一次搜索产生“管理”结果 - 整个项目列表变为绿色,而不仅仅是单个项目。)

任何人都可以指出我正确的方向。

3 个答案:

答案 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;