Стилизация добавленных строк в ArrayAdapter ListView Android

У меня есть ListView, который я хочу использовать с ArrayAdapter для добавления строк с разными стилями. Строки создаются в разных состояниях моего приложения, и в зависимости от разных состояний строки должны быть стилизованы (например, цвета и прочее).

Вот некоторый псевдокод:

при создании:

mArrayAdapter = new ArrayAdapter(this, R.layout.message);
mView = (ListView) findViewById(R.id.in);
mView.setAdapter(mArrayAdapter);

В разных состояниях, которые запускаются другим потоком с помощью MessageHandler, добавьте в список строку, содержащую сообщение:

mArrayAdapter.add("Message");

Это отлично работает, сообщения появляются в списке в зависимости от разных состояний, но я хочу, чтобы строки были оформлены по-разному. Как это сделать? Является ли решение создать собственный ArrayAdapter с помощью специального метода Add()?


person James Ford    schedule 15.07.2010    source источник


Ответы (1)


Что вам нужно сделать, так это создать собственный ArrayAdapter и переопределить метод getView(). Там вы можете решить, применять ли другой стиль к строке или нет. Например:

class CustomArrayAdapter extends ArrayAdapter {
    CustomArrayAdapter() {
        super(YourActivity.this, R.layout.message);
    }

    public View getView(int position, View convertView,
                                            ViewGroup parent) {
        View row=convertView;

        if (row==null) {                                                    
            LayoutInflater inflater=getLayoutInflater();

            row=inflater.inflate(R.layout.message, parent, false);
        }

        // e.g. if you have a TextView called in your row with ID 'label'
        TextView label=(TextView)row.findViewById(R.id.label);
        label.setText(items[position]);

        // check the state of the row maybe using the variable 'position'
        if( I do not actually know whats your criteria to change style ){
            label.setTextColor(blablabla);
        }

        return(row);
    }
}
person Cristian    schedule 15.07.2010
comment
Спасибо, Работает как шарм после некоторой настройки! - person James Ford; 15.07.2010
comment
Возникла какая-то новая проблема с этим. label.setTextColor() получает всю метку и устанавливает цвет для каждой строки. Он должен просто установить цвет для новой строки, а не для элементов, уже находящихся в списке. - person James Ford; 15.07.2010