Я предполагаю, что вы проанализировали строку JSON в объектной модели до рассмотрения любого случая ... давайте назовем этот класс Profile.
Стратегия 1
ArrayAdapter достаточно с переопределенным методом getView (..), который объединит несколько полей вместе, как вы хотите.
ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
// use the ViewHolder pattern here to get a reference to v, then populate
// its individual fields however you wish... v may be a composite view in this case
}
}
Я настоятельно рекомендую шаблон ViewHolder для потенциально больших списков: https://web.archive.org/web/20110819152518/http://www.screaming-penguin.com/node/7767
Это имеет огромное значение.
- Преимущество 1. Позволяет применять сложный макет к каждому элементу в ListView.
- Advantage 2. Не требует, чтобы вы манипулировали toString (), чтобы соответствовать вашему предполагаемому отображению (в конце концов, разделение логики модели и представления никогда не является плохой практикой проектирования).
Стратегия 2
В качестве альтернативы, если метод toString () в вашем репрезентативном классе уже имеет формат, приемлемый для отображения, вы можете использовать ArrayAdapter без overriding getView ().
Эта стратегия более проста, но заставляет вас разбивать все в одну строку для отображения.
ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles)