Bagaimana cara mendengarkan Picasso (Android) memuat acara lengkap?


92

Apakah ada cara untuk mendengarkan acara dari Picasso saat menggunakan pembuatnya seperti:

Picasso.with(getContext()).load(url).into(imageView);

Saya mencoba menelepon requestLayout()dan invalidate()menggunakan orang tua GridViewsehingga ukurannya akan diubah dengan benar, tetapi saya tidak tahu cara menyetel pendengar atau panggilan balik.

Saya melihat bahwa Picasso memiliki pelaporan peristiwa kesalahan, tetapi adakah peristiwa yang berhasil?

Jawaban:


272

Anda dapat menggunakan Callbackuntuk mendapatkan peristiwa onSuccess dan onError. Cukup tambahkan Callback baru ke permintaan Anda seperti:

Picasso.with(getContext())
    .load(url)
    .into(imageView, new com.squareup.picasso.Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError() {

                        }
                    });

Kemudian Anda dapat melakukan perubahan dan modifikasi apa pun di callback onSuccess.


1
Bagaimana cara menampilkan gambar kesalahan saat onError () dijalankan ??
Jas

2
Gunakan .error(R.drawable.error_placeholder_image)untuk menyetel gambar kesalahan
Raptor

Bagaimana cara mengakses konteks 'ini' dari dalam onSuccess? Saya perlu memperbarui beberapa variabel dalam konteks 'ini', dan juga bagaimana cara mengakses imageView di dalam callback? Thx
sonoluminescence

2
Coba ini YourClassName.this.yourVariable @sonoluminescence
Sofiane Hassaini

1
Akan seperti apa tampilan ini di Kotlin?
Dan2899

31

Jika Anda perlu mengakses bitmap sebelum dimuat ke tampilan, coba gunakan:

private Target target = new Target() {
      @Override
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {       
      }
      @Override
      public void onBitmapFailed() {
      }
}

Dalam metode panggilan:

Picasso.with(this).load("url").into(target);

Idealnya Anda akan menerapkan Target pada tampilan atau objek view holder secara langsung.

Semoga ini membantu


dimana imgView itu?
Noor Hossain

@NoorHossain mengatur bitmap gambar saat bitmap dimuat
famfamfam

6

Menjawab pertanyaan tindak lanjut @Jas sebagai komentar atas jawaban MrEngineer13 (karena saya tidak memiliki reputasi yang cukup untuk berkomentar dalam jawaban apa pun), Anda harus menggunakan error()metode ini sebelum mendaftar Callbackdi into()metode, misalnya:

Picasso.with(getContext())
    .load(url)
    .error(R.drawable.error_placeholder_image)
    .into(imageView, new com.squareup.picasso.Callback() {
        @Override
        public void onSuccess() {
            //Success image already loaded into the view
        }

        @Override
        public void onError() {
            //Error placeholder image already loaded into the view, do further handling of this situation here
        }
    }
);

6

Square baru-baru ini memperbarui kelas Target dan sekarang ada lebih banyak metode untuk diganti ( onPrepareLoaddan onBitmapFailed):

Target target = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {

    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {

    }
};

Dan Anda masih harus menggunakan:

Picasso.with(context).load(url).into(target);

3
 private final Callback mImageCallback = new Callback() {
        @Override
        public void onSuccess() {
            startPostponedEnterTransition();
        }

        @Override
        public void onError() {
            startPostponedEnterTransition();
        }
    };

RequestCreator creator = Picasso.with(getActivity()).load(list.get(position).getId());
creator.into(imageView, mImageCallback);

0

Coba ini

       Picasso.with(context)
            .load(services.get(position).getImageInactive())
            .into(holder.icon, new Callback() {
                @Override
                public void onSuccess() {
                    holder.imageLoad.setVisibility(View.GONE);
                }

                @Override
                public void onError() {
                    holder.icon.setImageResource(R.drawable.ic_error_image_load);
                }
            });

0

Sebagai pelengkap jawaban lain, jika Anda tidak tahu di mana harus menggunakan tampilan gambar asli, misalnya ImageView myIV:

Asli:

Picasso.with(activity).load(url).into(myIV);

Baru (dalam onBitmapLoaded()dari new Target()):

public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    myIV.setImageBitmap(bitmap);
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.