Я работаю над классом 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 приложения, в котором он будет использоваться. Надеюсь, я объяснил это четко. Что я делаю не так?
Нет, вы не будете знать действия, но вы можете позволить пользователям передавать свои экземпляры 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);