Загрузка ImageView для API Android

1

Я работаю над классом API для других разработчиков. В одном из моих функций есть массив ImageView, который я загружаю и назначаю его статическому ArrayList, чтобы разработчик использовал его.

Для получения ImageViews из Интернета я использую класс, который загружает их в async-методе. Моя проблема заключается в том, что если я не инициализирую ImageView с идентификатором из ресурсов, и я просто запустил его с помощью ImageView imgView = new ImageView (activity); // активность передается вызывающим классом, я не могу использовать/отображать изображения в активности, которая вызывает эту функцию.

Некоторые из моего кода:

это функция в моем классе api (а не в активности)

JSONArray banners = new JSONArray(result);

if(banners != null)
{
    for(int i = 0; i <    banners.length(); i++)
{
//ImageView imgView =(ImageView)activity.findViewById(R.id.imageView3); 
ImageView imgView = new ImageView(activity);

JSONObject jsonObjRecv = banners.getJSONObject(i);

String ImageUrl = jsonObjRecv.getString("image"); 

ImageLoad downloader = new ImageLoad(imgView);                                  
downloader.execute(ImageUrl);

imageViewsArray.add(imgView);

MainAcitiy:

ImageView imView = (ImageView)findViewById(R.id.imageView3);
imView = AlbosBanners.imageViewsArray.get(0);

Эта часть кода, которую я делаю, когда обработчик отправляет сообщение, что загрузка завершена, но просмотр изображения в действии не показывает ничего, а не загруженное изображение. imageView3 - это идентификатор образа изображения содержимого MainActivity xml

Примечание. Если я использую эту строку в своей функции:

ImageView imgView =(ImageView)activity.findViewById(R.id.imageView3); 

это работает.

Просто, чтобы ясно - в api я НЕ узнаю действия и xml приложения, в котором он будет использоваться. Надеюсь, я объяснил это четко. Что я делаю не так?

Теги:
imageview

1 ответ

0

Нет, вы не будете знать действия, но вы можете позволить пользователям передавать свои экземпляры activity и id ImageView в ваш метод.

В этом случае ваш метод загрузки изображений должен принимать 2 параметра, Activity и int - представление идентификатора ресурса ImageView.

Пример:

public void downloadImage(Activity context, int resId){
   // ..........
   ImageView imgView =(ImageView)context.findViewById(resId); 
}

то разработчики вызовут ваш метод следующим образом:

downloadImage(MyActivity.this, R.id.my_image_view);
  • 0
    Спасибо Энди, но что, если моя функция устанавливает массив с неизвестным прогнозируемым размером изображения? как пользователь сможет передать ресурсы? кстати, у меня уже есть экземпляр вызывающей активности
  • 0
    Ммм ... Тогда я не думаю, что это хороший дизайн. Из моего POV лучшим решением было бы, чтобы ваш метод возвращал ArrayList растровых объектов. Затем разработчики получат массив и пройдут по нему.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню