让 Glide 为所有 类 作为单身人士工作
make Glide work as singleton for all classes
我正在开发负责处理Glide
图像加载的模块
所有其他 类 必须使用 GlideFeatureModule
加载图像
GlideFeatureModule
interface IGlideLoad{
fun load(file: Any):GlideLoadImp
fun context(context: Fragment):GlideLoadImp
fun context(context: AppCompatActivity):GlideLoadImp
fun context(context: Context):GlideLoadImp
fun placeHolder(drawable: Drawable):GlideLoadImp
fun placeHolder(drawable: Int):GlideLoadImp
fun apply(requestOptions: BaseRequestOptions<*>):GlideLoadImp
fun into(imageView: ImageView):GlideLoadImp
fun build():GlideLoadImp
}
类 使用 GlideFeatureModule
glideLoad
.context(context)
.load(url)
.into(profileImage);
现在我卡在如何使用 Glide
提供的回调
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(...) {
}
@Override
public boolean onResourceReady(...) {
}
})
我想像
那样使用它
glideLoad.listener(new GlideLoadImp.GlideStatus() {
@Override
public void onSuccess() {
}
@Override
public void onFailed() {
}
});
您无需创建自定义回调即可从 RequestListener
界面获得响应。
那么如何获得回调呢?您可以简单地将此类接口的对象作为方法参数传递,以便处理回调。
看下面的例子:
/**
* Method that loads image explicitly to view passed as parameter provided by string url to be load into.
* It receives callback as method parameter to handle result.
* @param view as {@link ImageView} object
* @param url as {@link String} parameter
* @param listener as {@link RequestListener} object
*/
public void loadImage(@NonNull ImageView view, String url, RequestListener<Drawable> listener) {
Glide.with(view.getContext())
.load(url)
.listener(listener)
.into(view);
}
& 如何使用它
loadImage(imageView, "myUrl", new RequestListener<Drawable>() { //Here we will get callback
@Override
public boolean onLoadFailed(@android.support.annotation.Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
});
Edit for O.P.:
你可以试一试,假设你 class 现在被用作中介,如下所示:
class GlideLoad{
//we store our listener object here to provide callback
var callback : GlideLoadImp.GlideStatus? = null
fun listener(listener: GlideLoadImp.GlideStatus?) {
this.callback = listener
}
}
我们从外部使用方法从 O.P.,
设置它
glideLoad.listener(object: GlideLoadImp.GlideStatus() {
override fun onSuccess() {
}
override fun onFailed() {
}
})
现在,在我们的 RequestListener
回调期间,我们可以提供值或调用我们的 回调侦听器 ,如下所示:
class GlideLoad {
... Some code
// some method having our RequestListener implementation
object: RequestListener<Drawable>() {
override fun Boolean onLoadFailed(...) {
callback?.onFailed(you can pass params here if needed)
}
override fun Boolean onResourceReady(...) {
callback?.onSuccess(you can pass params here if needed)
}
}
... Some other code
}
我正在开发负责处理Glide
图像加载的模块
所有其他 类 必须使用 GlideFeatureModule
加载图像
GlideFeatureModule
interface IGlideLoad{
fun load(file: Any):GlideLoadImp
fun context(context: Fragment):GlideLoadImp
fun context(context: AppCompatActivity):GlideLoadImp
fun context(context: Context):GlideLoadImp
fun placeHolder(drawable: Drawable):GlideLoadImp
fun placeHolder(drawable: Int):GlideLoadImp
fun apply(requestOptions: BaseRequestOptions<*>):GlideLoadImp
fun into(imageView: ImageView):GlideLoadImp
fun build():GlideLoadImp
}
类 使用 GlideFeatureModule
glideLoad
.context(context)
.load(url)
.into(profileImage);
现在我卡在如何使用 Glide
提供的回调
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(...) {
}
@Override
public boolean onResourceReady(...) {
}
})
我想像
那样使用它glideLoad.listener(new GlideLoadImp.GlideStatus() {
@Override
public void onSuccess() {
}
@Override
public void onFailed() {
}
});
您无需创建自定义回调即可从 RequestListener
界面获得响应。
那么如何获得回调呢?您可以简单地将此类接口的对象作为方法参数传递,以便处理回调。
看下面的例子:
/**
* Method that loads image explicitly to view passed as parameter provided by string url to be load into.
* It receives callback as method parameter to handle result.
* @param view as {@link ImageView} object
* @param url as {@link String} parameter
* @param listener as {@link RequestListener} object
*/
public void loadImage(@NonNull ImageView view, String url, RequestListener<Drawable> listener) {
Glide.with(view.getContext())
.load(url)
.listener(listener)
.into(view);
}
& 如何使用它
loadImage(imageView, "myUrl", new RequestListener<Drawable>() { //Here we will get callback
@Override
public boolean onLoadFailed(@android.support.annotation.Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
});
Edit for O.P.:
你可以试一试,假设你 class 现在被用作中介,如下所示:
class GlideLoad{
//we store our listener object here to provide callback
var callback : GlideLoadImp.GlideStatus? = null
fun listener(listener: GlideLoadImp.GlideStatus?) {
this.callback = listener
}
}
我们从外部使用方法从 O.P.,
设置它glideLoad.listener(object: GlideLoadImp.GlideStatus() {
override fun onSuccess() {
}
override fun onFailed() {
}
})
现在,在我们的 RequestListener
回调期间,我们可以提供值或调用我们的 回调侦听器 ,如下所示:
class GlideLoad {
... Some code
// some method having our RequestListener implementation
object: RequestListener<Drawable>() {
override fun Boolean onLoadFailed(...) {
callback?.onFailed(you can pass params here if needed)
}
override fun Boolean onResourceReady(...) {
callback?.onSuccess(you can pass params here if needed)
}
}
... Some other code
}