我使用SimpleCursorAdapter
列出了数据库中的名称,我希望使用SimpleCursorAdapter.ViewBinder
的方法更改特定名称的颜色。我在运行此方法时遇到问题,我的数据库包含不同的名称,但ListView
会将所有namse显示为一个特定名称。我究竟做错了什么?如何更改特定名称的文本颜色?是否可以使用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;
}
};
这是我的输出图片:
我该如何解决这个问题?
答案 0 :(得分: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 :(得分: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
的来电。
答案 2 :(得分:1)
尝试使用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