1

我已经列出了数据库中的名称,我想使用's 方法SimpleCursorAdapter更改特定名称的颜色。SimpleCursorAdapter.ViewBinder运行此方法时遇到问题,我的数据库包含不同的名称,但ListView会将所有名称显示为一个特定名称。我究竟做错了什么?如何更改特定名称的文本颜色?可以使用ViewBinder吗?

这是我的代码的一部分ViewBinder

    SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() {

    @Override
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
        // TODO Auto-generated method stub
        String[] temp = dh.return_result();
        tv = (TextView)findViewById(R.id.textView1);
        tv = (TextView) view;
        for(int i = 0; i<temp.length; i++)
        {
            if(temp[i].equalsIgnoreCase("Ameer Zhann"))
            {
                tv.setText(temp[i]);
                tv.setTextColor(Color.rgb(58, 58, 224));
                return true;
            }
        }
        return false;
    }
};

这是我的输出图像:

图片

我该如何解决这个问题?

4

3 回答 3

5

试试这个方法:

public boolean setViewValue(View view, Cursor cursor, int columnIndex){    
    int getIndex = cursor.getColumnIndex("Name");
    String empname = cursor.getString(getIndex);
    tv = (TextView) view;
    tv.setTextColor(Color.WHITE);
    tv.setText(empname);
    if(empname.equals("Any String"))
    {                   
        tv.setTextColor(Color.rgb(58, 58, 224));
        return true;
    }
    return false;           
}
于 2011-12-15T10:01:49.527 回答
3

代码完全按照您的要求进行 - 对于您中的每个元素Cursor都会遍历所有列表并设置每个元素的文本。我认为“Ameer Zhann”是您列表中的最后一个结果,因此仅此文本留在TextView.

setViewValue(...)为 的每个元素调用的方法Cursor。所以,你不需要任何循环,只需用光标值填充文本tv.setText(Cursor.getString(...));

这段代码也有一些奇怪的地方:

tv = (TextView)findViewById(R.id.textView1);
tv = (TextView) view; 

view这是作为参数出现的 - 已经是带有 id 的视图R.id.textView1- 所以只需删除findViewById.

于 2011-12-15T07:25:56.003 回答
1

尝试其他部分

if(temp[i].equalsIgnoreCase("Ameer Zhann")){
    tv.setText(temp[i]);
    tv.setTextColor(Color.rgb(58, 58, 224));
}else{
    tv.setText(temp[i]);
}

最后返回 true 而不是 false

于 2011-12-15T07:16:16.427 回答