(Base 시리즈 2)BaseMVPACtivityBaseViewBasePresenter 패키지

3867 단어 android
즐거운 단오 연휴가 지났는데 모두 3일을 어떻게 보냈을까?나처럼 3일 동안 집에 있지 않았으면 좋겠어요.
public abstract class BaseMVPActivity

extends BaseActivity implements BaseView { protected P mPresenter; }


간단히 말하자면 Base MVPACtivity는 BaseActivity에서 직접 계승하면 된다. 단지 하나의 속성, 일반적인 Presenter가 있고 BaseView를 실현했다. 먼저 BaseView 코드를 보자.
public interface BaseView {
    void showLoadingDialog();
    void showLoadingDialog(String msg, boolean cancelable);
    void dismissLoadingDialog();
    void showErrorDialog();
    void showErrorDialog(String title, String subtitle, boolean cancelable, boolean isConnected);
    void dismissErrorDialog();
    void addDisposable(Disposable disposable);
    void addObserver(Observer observer);
}

BaseView 코드도 간단합니다. 모든 페이지가 필요로 하는 일반적인 방법입니다. 방법명은BaseActivity와 일치하면 됩니다. 그러면 현식override가 필요하지 않고 presenter에서view를 진행합니다.xxxx ()면 됩니다. 최종적으로 호출된 방법은BaseActivity의 방법일 것입니다. BasePresenter 코드를 다시 한 번 보십시오.
public interface BasePresenter {
    K attachView(T view);
}

하나의attchView 방법으로BaseView에서 계승된 일반 T 파라미터를 받아들이고BasePresenter에서 계승된 K를 되돌려줍니다. 사실 실제적으로 되돌아오는 것은 클래스 자신을 실현하는 것입니다. 다음은 대략적인 사용 예시를 보겠습니다.
public interface PadGoodsDetailContact {

    interface View extends BaseView {
        void onLoadGoodsDetailInfoSuccess(ProDetailInfo proDetailInfo);
        void onGoodsNoSold();
    }

    interface Presenter extends BasePresenter {
        void loadGoodsDetailInfo(int channelId);
    }
}

이것은 상품의 상세한 정보를 얻는 모듈의 예이다. Contact에는 하나의 View와 하나의 Presenter가 각각 BaseView,BasePresenter에서 계승되어 구체적인 방법과 파라미터를 정의하고 다음은 View를 실현하는 부분을 본다.
public class PadGoodsDetailActivity extends BaseMVPActivity implements PadGoodsDetailContact.View{

    ...

    @Override
    protected int getLayout() {
                BaseActivity setContent    ,       
        return R.layout.activity_pad_goods_detail;
    }

    @Override
    protected void initData(Bundle savedInstanceState) {
        mPresenter = new PadGoodsDetailPresenter().attachView(this);
        ...
    }

    ...

    @Override
    public void onLoadGoodsDetailInfoSuccess(ProDetailInfo proDetailInfo) {
        ...
    }

    ...

    @Override
    public void onGoodsNoSold() {
        ...
    }
}

많은 구체적인 코드를 생략했지만 대체적으로 이렇다. initData()는 지난 편에서 초기화 작업을 하기 위해 특별히 남겨 두었기 때문에 mPresenter에 가장 먼저 값을 부여한다.즉attchView의 반환값이다.PadGoodsDetailPresenter의 구체적인 코드를 본다
public class PadGoodsDetailPresenter implements PadGoodsDetailContact.Presenter {

    private PadGoodsDetailContact.View view;

    @Override
    public void loadGoodsDetailInfo(int channelId) {
        view.showLoadingDialog();
        view.dismissLoadingDialog();
        ...
        view.onLoadGoodsDetailInfoSuccess(xxx);
        view.onGoodsNoSold();
    }

    @Override
    public PadGoodsDetailContact.Presenter attachView(PadGoodsDetailContact.View view) {
        this.view = view;
        return this;
    }
}

같은 생략 부분은 구체적인 코드와 무관하지만 관건적인 부분은 이미 모두 있다. 이로써 완전한 작은 MVP 구조가 모두 생겼다. 총괄적으로 말하자면BaseActivity,BaseMVPactivity,BaseView,BasePresenter를 봉한 다음에 구체적인 모듈의Contact를 쓰고 VIew와Presenter를 포함한다.그리고 이 모듈의Activity는BaseMVPactivity에서 계승되어Contactt를 실현합니다.View, Contact를 위해 모듈의 Presenter를 작성합니다.Presenter, 이 Presenter에는 하나의 Contact가 포함되어 있습니다.TchView의 구성원 변수,attchView에서 이 변수를 부여하고 이Presenter의 실례, 즉 Base MVPactivity의 mPresenter를 되돌려줍니다. 대략적인 절차는 이렇습니다. 묘사가 잘 되지 않지만 위의 코드 예시와 결합하면 쉽게 알 수 있다고 믿습니다. OK, 기록이 완성되고 게으른 암을 이겨내는 길에 한 걸음 더 나아갔다고 믿습니다.다음 편, 나는 베이스 Fragment, 베이스 MVP Fragment를 하나 더 쓸 생각이다. 사실 방법은 모두 같다. 그럼, 다음 편에서 보자. 끽.

좋은 웹페이지 즐겨찾기