У меня есть ListView
, который я хочу использовать с ArrayAdapter
для добавления разных стилизованных строк. Строки создаются в разных состояниях в моем приложении, и в зависимости от разных состояний строки должны быть стилизованы (например, цвета и прочее).
Вот несколько псевдокодов:
при создании:
mArrayAdapter = new ArrayAdapter(this, R.layout.message);
mView = (ListView) findViewById(R.id.in);
mView.setAdapter(mArrayAdapter);
В разных состояниях, которые запускаются другим потоком с помощью MessageHandler, добавьте строку в список, содержащий сообщение:
mArrayAdapter.add("Message");
Это отлично работает, сообщения появляются в списке в зависимости от разных состояний, но я хочу, чтобы строки были разными. Как это сделать? Является ли решение создать пользовательский ArrayAdapter
с помощью специального метода Add()?
Что вам нужно сделать, так это создать пользовательский 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);
}
}