我正在使用Android Image Slider库在滑块上显示图片。但是,某些图像未加载,因为后端需要身份验证。所以我需要一个不加载图像的监听器。
这是库:里面抽象的BaseSliderView类,有ImageLoadListener接口。我正在使用setOnImageLoadListener方法设置监听器。
public abstract class BaseSliderView {
.....
private ImageLoadListener mLoadListener;
.....
protected void bindEventAndShow(final View v, ImageView targetImageView){
....
rq.into(targetImageView,new Callback() {
@Override
public void onSuccess() {
if(v.findViewById(R.id.loading_bar) != null){
v.findViewById(R.id.loading_bar).setVisibility(View.INVISIBLE);
}
}
@Override
public void onError() {
if(mLoadListener != null){
mLoadListener.onEnd(false,me);
}
if(v.findViewById(R.id.loading_bar) != null){
v.findViewById(R.id.loading_bar).setVisibility(View.INVISIBLE);
}
}
});
}
/**
* set a listener to get a message , if load error.
* @param l
*/
public void setOnImageLoadListener(ImageLoadListener l){
mLoadListener = l;
}
.....
public interface ImageLoadListener{
void onStart(BaseSliderView target);
void onEnd(boolean result,BaseSliderView target);
}
.....
}
我检查过,当没有加载图像时,在库模块中调用接口onEnd方法。
但是在app模块上,即使在库模块中调用它也不会调用onEnd方法。
为什么会这样?不应该在app模块中调用onEnd方法吗?如何解决这个问题呢?
答案 0 :(得分:1)
我可以使用greenrobot的EventBus库来解决这个问题。首先,我已将库依赖项添加到库build.gradle文件:
compile 'org.greenrobot:eventbus:3.0.0'
为事件创建了类:
public class ImageLoadErrorEvent {
String url;
ImageView imageView;
public ImageLoadErrorEvent(String url, ImageView imageView) {
this.url = url;
this.imageView = imageView;
}
public String getUrl() {
return url;
}
public ImageView getImageView() {
return imageView;
}
}
发布于BaseSliderView类:
@Override
public void onError() {
if(mLoadListener != null){
mLoadListener.onEnd(false,me);
EventBus.getDefault().post(new ImageLoadErrorEvent(mUrl, targetImageView));
}
if(v.findViewById(R.id.loading_bar) != null){
v.findViewById(R.id.loading_bar).setVisibility(View.INVISIBLE);
}
}
在Activity中,在onCreate方法中,注册了EventBus:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
EventBus.getDefault().register(this);
然后创建onMessageEvent:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(ImageLoadErrorEvent event) {
MyToast.show("Error");
}
是的,现在它正在运作!