Какой адаптер использовать – BaseAdapter или ArrayAdapter?

У меня есть строка JSON с несколькими экземплярами следующих

  1. имя
  2. Сообщение
  3. Отметка
  4. URL профиля фото

Я хочу создать ListView, где каждый список будет иметь выше. Какой из них лучше адаптировать для этого конкретного случая, чтобы создать пользовательский адаптер?

Solutions Collecting From Web of "Какой адаптер использовать – BaseAdapter или ArrayAdapter?"

Мое предположение состоит в том, что вы проанализировали строку 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.
  • Преимущество 2. Не требует, чтобы вы манипулировали toString () в соответствии с вашим предполагаемым отображением (в конце концов, разделение модели и логики просмотра не является плохим дизайном).

Стратегия 2

В качестве альтернативы, если метод toString () на вашем представительском классе уже имеет формат, приемлемый для отображения, вы можете использовать ArrayAdapter без переопределения getView ().

Эта стратегия проще, но заставляет вас разбивать все на одну строку для отображения.

 ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles)