Динамический список элементов из Cursor в LinearLayout, без использования ListView - PullRequest
2 голосов
/ 22 октября 2011

Я хотел бы отобразить несколько (5-ти) элементов из курсора в списке, и я хотел бы синхронизировать его с содержимым курсора (который, в свою очередь, указывает на базу данных), но я не хочу использовать ListViews. Вместо этого я хотел бы заполнить простой старый LinearLayout.

Кажется, я понимаю, что мне нужно создать собственный CursorAdapter и переопределить методы newView () и bindView (). Чего я не понимаю, так это того, кто отвечает за перебор элементов курсора (это делает CursorAdapter? Должен ли мой код делать это?), Как представления для каждого элемента связаны с LinearLayout и кто отвечает за создание новых представления для новых элементов в курсоре или удаление представлений для элементов, которые больше не доступны через курсор?

Почему-то у меня есть догадка, что CursorAdapter уже выполняет большую часть работы, но я не могу собрать все кусочки головоломки. Должен ли я просто накачать макет строки в newView () и добавить его непосредственно в LinearLayout? И как удалить строку, если курсор больше не имеет связанных данных?

Спасибо за вашу помощь!

Маню

Ответы [ 3 ]

1 голос
/ 22 октября 2011

CursorAdapter позволяет вам перемещаться по большому списку без необходимости загружать все элементы в память. Если у вас просто будет небольшая кучка элементов, то я просто переберу их в вашей активности и обновлю ваше представление соответствующим образом (добавление представлений, установка текстовых значений, отображение / скрытие и т. Д.)

1 голос
/ 22 октября 2011

Используйте CursorLoader .Когда в вашем контенте происходят изменения, он обновляется автоматически.

1 голос
/ 22 октября 2011

Ну, я бы сделал следующее:

  • Создайте собственный класс, подкласс LinearLayout, просто чтобы сделать его простым. Давайте назовем это MyList
  • Вы передаете экземпляр CursorAdapter этому классу (например, создаете метод setAdapter)
  • При получении адаптера MyList будет регистрировать изменения данных (CursorAdapter.registerDataSetObserver). Когда набор данных изменяется, вызовите метод «заполнить»
  • При получении адаптера также вызывайте напрямую "заполнить", чтобы получить начальное содержимое
  • Реализация MyList.populate: ** вызовите removeAllViews ** для каждого элемента (перебрать курсор) вызовите addView (CursorAdapter.newView (getContext (), курсор, это))

Вот и все, короче. Конечно, позже вы можете захотеть оптимизировать его, сохранить старые представления и использовать вместо этого CursorAdapter.bindView, чтобы вам не нужно было создавать новые тяжелые объекты Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...