Добавление изображений и текста из строковых массивов в учебник Lazy Loading от fedor - PullRequest
0 голосов
/ 24 декабря 2011

Мне нужно написать приложение для анализа списка узлов из онлайн-файла XML (каждый узел содержит текст, ссылку на изображение и ссылку на веб-сайт) и отобразить их в виде ListView, поэтомучто при выборе элемента ListView (с соответствующим изображением и заголовком) откроется соответствующая ссылка в браузере.На данный момент я проанализировал информацию в файле XML и сохранил ее в трех массивах String для легкого доступа / обработки: titleArray, imageurlArray и linkArray

Я попытался изменить приложение отложенной загрузки Fedor (https://stackoverflow.com/a/3068012/1114109), чтобы заставить его работать с titleArray и imageurlArray, но я просто не могу понять это правильно.

1 Ответ

2 голосов
/ 24 декабря 2011

Я бы сказал, что самым простым подходом было бы объединить ваши три отдельных массива в один массив объектов, содержащих одинаковые данные. Другими словами, создайте объект-сущность с тремя атрибутами: title, imageUrl и link.

class XMLEntity {
    String title, imageUrl, link;
    // add contructor, getters and setters to your own liking...
}

...
XMLEntity[] objects = ...

Затем вы передаете этот массив объектов конструктору адаптера, и в методе getView вы можете установить TextView, ImageView и другие элементы пользовательского интерфейса на основе данных в XMLEntity.

public LazyAdapter(Activity a, XMLEntity[] objects) {
    //...
}

public View getView(int position, View convertView, ViewGroup parent) {
    // ... convertview stuff
    XMLEntity current = objects[position]
    someTextView.setText(current.getTitle());
    imageLoader.DisplayImage(current.getImageUrl(), someImageView);
}

Если вы идете по этому пути, я бы также взглянул на ArrayAdapter, который упрощает для вас некоторую логику BaseAdapter.

// Edit: если вам нравится быстрое и грязное решение: переместите реализацию адаптера как подкласс в действие, содержащее ваш ListView, и просто заставьте его работать с тремя массивами, которые у вас есть в данный момент - при условии, что они здесь сохраняются и индексы «совпадают» для всех трех массивов.

public View getView(int position, View convertView, ViewGroup parent) {
    // ... convertview stuff
    someTextView.setText(titleArray[position); // get title from titleArray
    imageLoader.DisplayImage(imageurlArray[position], someImageView); //get image url from imageurlArray
}
...