Изменение цвета текста в Listview с помощью SimpleCursorAdapter.ViewBinder - PullRequest
1 голос
/ 15 декабря 2011

Я перечислил имена из базы данных, используя 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;
    }
};

и это мое выходное изображение:

image

Как я могу решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 15 декабря 2011

Попробуйте так:

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;           
}
3 голосов
/ 15 декабря 2011

Код делает именно то, что вы просите - для каждого элемента в Cursor вы просматриваете весь список и задаете текст каждого элемента.Я думаю, что «Ameer Zhann» является последним результатом в вашем списке, поэтому только этот текст остался в TextView.

Метод setViewValue(...) вызван для каждого элемента Cursor.Таким образом, вам не нужен цикл, просто заполните текст значением курсора tv.setText(Cursor.getString(...));.

Также есть что-то странное с этим кодом:

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

view, который выглядит какparam - это уже просмотр с идентификатором R.id.textView1 - просто удалите вызов findViewById.

1 голос
/ 15 декабря 2011

попробуйте с остальной частью

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

и в конце верните true вместо false

...