2012-06-22 2 views
0

У меня около 700 элементов для отображения в виде сетки.Forbid GridView для загрузки всех видов сразу

На вкладке Galaxy Tab 10.1 это не проблема: у нее достаточно памяти. В проводнике HTC куча переполнена.

Так что я хочу динамически загружать данные относительно текущей позиции прокрутки (N строк для экрана + 5 строк в виде хвоста). И я хочу показать полосу прокрутки, которая представляет позицию в полных строках. Но я не хочу рисовать предметы, которых я не вижу.

Другими словами, я хочу создать нечто похожее на UITableView в iOS. Как я могу это сделать?

ответ

2

Android Adapter работает аналогично iOS UITableViewDataSource. Вам нужно позвонить

public void setAdapter (ListAdapter adapter) 

на вашем GridView, а затем, что адаптер получит называть спины, как:

public int getCount() 
public View getView (int position, View convertView, ViewGroup parent) 

Очень важно, чтобы вы повторно convertView так же, как вы из очереди на UITableViewCell в

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

Если вы сделаете все правильно, он никогда не попытается загрузить все виды одновременно, а только те, которые отображаются в данный момент, и вы не должны иметь память ms больше.

+0

Да, я заметил, что 'GridView' повторяет представления так же хорошо, как' ListView' (я зарегистрировал 'getView'). Но как вы объясняете этот факт. Я загружаю изображения с удаленного сервера, и когда на экране появляются снимки, МЕДЛЕННО появляются один за другим, но когда я прокручиваю вниз, другие изображения УЖЕ загружаются. Есть 1000 элементов для отображения и 63 на одном экране. – efpies

+0

Когда вы запускаете загрузку изображений? Обычно я запускаю 'AsyncTask' из' getView', если изображение еще не загружено. Когда заканчивается «AsyncTask», я кэширую изображение и обновляю представление, которое запускало его, только если оно видно. – monchote

+0

О, у меня есть ошибка в моей логике: есть повторяющиеся блоки одинаковых фотографий. – efpies

0

Вы должны использовать ListView, который может повторно использовать объекты View, так что вам не нужно создавать экземпляры так много объектов.

+0

'GridView' использует' ListAdapter' и повторно использует представления точно так же, как 'ListView'. – monchote

Смежные вопросы