使用 SimpleCursorAdapter.ViewBinder 更改 Listview 中的文本颜色

发布于 2024-12-21 10:59:34 字数 1060 浏览 2 评论 0原文

我已使用 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;
    }
};

这是我的输出图像:

Image

如何我可以解决这个问题吗?

I've listed the names from database using SimpleCursorAdapter and I want to change the color of a particular name using SimpleCursorAdapter.ViewBinder's method. I've a problem while running this method, my database contains different names but the ListView will display all the namse as one particular name. What am I doing wrong? How to change the text color of a specific name? Is it possible using ViewBinder?

This is my part of of code for 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;
    }
};

and this is my output image:

Image

How can I solve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

霊感 2024-12-28 10:59:34

试试这个方法:

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;           
}

Try this way:

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;           
}
纵情客 2024-12-28 10:59:34

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

Cursor 的每个元素调用方法 setViewValue(...)。因此,您不需要任何循环,只需用光标值 tv.setText(Cursor.getString(...)); 填充文本即可。

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

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

作为参数的 view - 已经是 ID 为 R.id.textView1 的视图 - 所以只需删除 findViewById< 的调用即可/代码>。

Code do exactly what you ask - for every element in Cursor you go through all list and set text of each element. I think that "Ameer Zhann" is last result in your list, so only this text left in TextView.

Method setViewValue(...) called for every element of Cursor. So, you don't need any cycle, just fill text with cursor value tv.setText(Cursor.getString(...));.

Also there is something strange with this code:

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

view that comes as param - is already view with id R.id.textView1 - so just remove call of findViewById.

太阳哥哥 2024-12-28 10:59:34

尝试使用 else 部分

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

,最后返回 true 而不是 false

try with the else part

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

and at the end return true instead of false

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文