1

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

这是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

我该如何解决这个问题?

回答

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

+1 – MKJParekh 2011-12-15 10:05:33

1

尝试与其他部分

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

,并在年底回归真实,而不是虚假

+0

是的,这else部分也很重要。谢谢 – Praveenkumar 2011-12-15 10:03:02

3

代码你问到底是什么 - 在Cursor每个元素你经历所有的列表和设置的文本每个元素。我认为“Ameer Zhann”是您的列表中的最后一个结果,因此只有TextView中的文字留下。

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

也有一些奇怪的事情,此代码:

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

view自带的参数:param - 已经查看与ID R.id.textView1 - 所以只是删除的findViewById调用。

+0

如果我删除findViewById的意思,它会影响listview而不是textview。所以,对于正确的解决方案,这是重要的 – Praveenkumar 2011-12-15 10:05:01