Android - 库模块的接口方法未在app模块

时间:2017-04-01 18:37:00

标签: android picasso

我正在使用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方法。

enter image description here

但是在app模块上,即使在库模块中调用它也不会调用onEnd方法。

enter image description here

为什么会这样?不应该在app模块中调用onEnd方法吗?如何解决这个问题呢?

1 个答案:

答案 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");
}

是的,现在它正在运作!