以下のコードはループで呼び出されます。私はthis SO answerを読んだが、私はsetTag
からMenuItem
には届かないので、Target
はガベージコレクションされる。 onBitmapLoaded
は呼び出されません。どうすればこの問題を解決できますか?ピカソでループ内のメニュー項目にビットマップを読み込む
もう1つの質問は、アプリの最初の起動時には機能しません。このメソッドをもう一度呼び出すと、どうやって動作しますか?
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'の参照を保持するのが妥当あります。このメソッドを持つオブジェクトのフィールドとして?アクティビティ、コントローラ、またはビューの一部 –
もう1つの質問として、コールバックが最初に戻ってこない理由は、読み込み中に 'Target'参照が失われますが、2回目には応答がキャッシュされ、' Target '。 –
アクティビティ - >「Picasso.with(MainActivity.this)」 – osrl