Код, приведенный ниже, вызывается в цикле. Я читал this SO answer, но, поскольку я не могу setTag
MenuItem
, Target
получает собранный мусор. onBitmapLoaded
не вызывается. Как я могу решить эту проблему.Загрузка растрового изображения в элемент меню в цикле с помощью Picasso
Другой вопрос: при первом запуске приложения оно не работает. Как это работает после того, как я снова вызову этот метод.
private void addServiceToMenu(Service service, final MenuItem menuItem) {
if (!TextUtils.isEmpty(service.getIconURL())) {
Resources resources = getResources();
final int targetWidth = resources.getDimensionPixelSize(R.dimen.menu_icon_size);
final int targetHeight = resources.getDimensionPixelSize(R.dimen.menu_icon_size);
final Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
drawable.setBounds(0, 0, targetWidth, targetHeight);
menuItem.setIcon(drawable);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) { }
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) { }
};
Picasso.with(MainActivity.this).load(service.getIconURL())
.resize(targetWidth, targetHeight)
.into(target);
}
}
Конечно, есть где-то разумно держать 'Target' ссылку, хотя. Как поле объекта, который имеет этот метод? Некоторые действия, контроллер или просмотр? –
Что касается другого вопроса, то причина, по которой обратный вызов не возвращается в первый раз, заключается в том, что ссылка «Target» теряется при загрузке, но во второй раз мы получаем кеширование ответа и мы немедленно обращаемся к «Целевому» '. –
Это активность -> 'Picasso.with (MainActivity.this)' – osrl