Реализуйте собственный адаптер для вашего класса:
public class MyClassAdapter extends ArrayAdapter<MyClass> {
private static class ViewHolder {
private TextView itemView;
}
public MyClassAdapter(Context context, int textViewResourceId, ArrayList<MyClass> items) {
super(context, textViewResourceId, items);
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(this.getContext())
.inflate(R.layout.listview_association, parent, false);
viewHolder = new ViewHolder();
viewHolder.itemView = (TextView) convertView.findViewById(R.id.ItemView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
MyClass item = getItem(position);
if (item!= null) {
// My layout has only one TextView
// do whatever you want with your string and long
viewHolder.itemView.setText(String.format("%s %d", item.reason, item.long_val));
}
return convertView;
}
}
Для тех, кто не очень знаком с платформой Android, это более подробно объясняется здесь: https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView .
textViewResourceId
что выше не используется?Вы можете просто добавить
toString()
метод в MyClass для http://developer.android.com/reference/android/widget/ArrayAdapter.html :источник
MyClass
, вам придется провести рефакторинг. Наконец, как правило, привязывать логику представления к вашим моделям - плохая идея. Модели не должны знать, как они представлены пользователю.MyClass
потребуется добавить выделенный класс,MyClassView
который обертывает базовую модель (и обеспечиваетtoString( )
реализациюДумаю, это лучший подход. Использование универсального класса ArrayAdapter и расширение вашего собственного адаптера Object очень просто:
а вот и ваш адаптер (пример):
и, наконец, как его инициализировать:
Я создал Gist с настраиваемой гравитацией макета TextView ArrayAdapter:
https://gist.github.com/m3n0R/8822803
источник
Создайте подкласс ArrayAdapter и переопределите метод getView (), чтобы вернуть собственное представление, содержащее содержимое, которое вы хотите отобразить.
источник
Вот быстрый и грязный пример того, как использовать ArrayAdapter, если вы не хотите беспокоиться о расширении материнского класса:
источник