Стилизация добавила строки в ArrayAdapter ListView Android - PullRequest
1 голос
/ 15 июля 2010

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

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

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

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

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

mArrayAdapter.add("Message");

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

1 Ответ

1 голос
/ 15 июля 2010

Что вам нужно сделать, это создать пользовательский 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);
    }
}
...