Динамическая подгрузка списка
от aNNiMON
Динамическая подгрузка списка может быть полезной в тех случаях, когда данных очень много, но пользователю может быть полезна не вся информация, а лишь её начальная часть. Примером может служить новостная лента: чтобы не грузить полный список новостей за день, грузятся сначала недавние новости, а потом, по мере прокручивания списка, подгружается более старая информация. По такому способу можно сделать и загрузку твитов, RSS-ленты, почты и так далее.
+ Плюсы:
* Повышается производительность и скорость работы, так как грузится не вся информация, а лишь некоторая её часть.
* Пользователю не нужно лишний раз нажимать на какие-либо кнопки (как это может быть в постраничной навигации) - всё делается автоматически при скроллинге.
- Минусы:
* Невозможно заранее узнать, сколько всего элементов в списке.
* Если необходимо посмотреть последние элементы - придётся очень долго листать и подгружать список.
Несмотря на все минусы, большинство популярных приложений, используют динамическую подгрузку списка. Среди них: Gmail, ВКонтакте, клиенты Twitter'а и другие.
Для быстрого создания такого списка, можно воспользоваться классом MoreListHelper.java
Пример использования:
* Метод onLoadItems выполняется в отдельном потоке, поэтому можно смело ставить туда тяжеловесные операции, такие как загрузка данных из Интернета или из файла.
* Указание количества элементов на страницу setItemsPerPage(..) ни на что не влияет и сделано для удобства. То значение, которое указывается передаётся как параметр методу onLoadItems. Если у вас другие планы касательно количества загрузки элементов, можете игнорировать это значение.
* В примере создаётся новый адаптер, но можно воспользоваться и своим, для этого следует передать ссылку на него: moreListHelper.setAdapter(yourCustomAdapter);
* В примере используется адаптер для данных типа String, но MoreListHelper позволяет работать с любым другим типом данных.
* Если не передать свой View в качестве отображаемого при загрузке, то будет создан обычный TextView с оповещением о загрузке.
Вот как всё это выглядит
+ Плюсы:
* Повышается производительность и скорость работы, так как грузится не вся информация, а лишь некоторая её часть.
* Пользователю не нужно лишний раз нажимать на какие-либо кнопки (как это может быть в постраничной навигации) - всё делается автоматически при скроллинге.
- Минусы:
* Невозможно заранее узнать, сколько всего элементов в списке.
* Если необходимо посмотреть последние элементы - придётся очень долго листать и подгружать список.
Несмотря на все минусы, большинство популярных приложений, используют динамическую подгрузку списка. Среди них: Gmail, ВКонтакте, клиенты Twitter'а и другие.
Для быстрого создания такого списка, можно воспользоваться классом MoreListHelper.java
Пример использования:
- public class ExampleActivity extends ListActivity implements AdapterView.OnItemClickListener {
- private MoreListHelper<String> moreListHelper;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- moreListHelper = new MoreListHelper<String>(this, getListView()) {
- @Override
- public void onLoadItems(ArrayList<String> items, int itemsPerPage) {
- // Метод подгрузки выполняется в отдельном потоке.
- try {
- // Имитируем тяжелую загрузку.
- Thread.sleep(2000);
- } catch (InterruptedException e) {}
- for (int i = 0; i < itemsPerPage; i++) {
- items.add(String.valueOf(System.currentTimeMillis()));
- }
- }
- };
- moreListHelper.setItemsPerPage(15);
- moreListHelper.createAdapter(android.R.layout.simple_list_item_1);
- setListAdapter(moreListHelper.getAdapter());
- moreListHelper.loadItems();
- getListView().setOnItemClickListener(this);
- }
- @Override
- public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
- // Работаем с данными
- }
- }
* Метод onLoadItems выполняется в отдельном потоке, поэтому можно смело ставить туда тяжеловесные операции, такие как загрузка данных из Интернета или из файла.
* Указание количества элементов на страницу setItemsPerPage(..) ни на что не влияет и сделано для удобства. То значение, которое указывается передаётся как параметр методу onLoadItems. Если у вас другие планы касательно количества загрузки элементов, можете игнорировать это значение.
* В примере создаётся новый адаптер, но можно воспользоваться и своим, для этого следует передать ссылку на него: moreListHelper.setAdapter(yourCustomAdapter);
* В примере используется адаптер для данных типа String, но MoreListHelper позволяет работать с любым другим типом данных.
* Если не передать свой View в качестве отображаемого при загрузке, то будет создан обычный TextView с оповещением о загрузке.
Вот как всё это выглядит